[OK]を、アレックスは、ポイントは、Linuxのすべてのユーザ空間プロセスが使用を開始していることであるinit
そのpidの1である。例えば、実行、プロセスpstree
ルートのinitされ、あなたのプロセスのツリーを、参照するには...いくつかのバージョンがありinit
、プロセスの実装では、最近、最も注目すべきは
- sysVinit(古典的なinit、古いDebianを含むいくつかのディストリビューションでまだ使用されています)
- 古いUbuntuと一部のRHEL(Red Hat)および古いFedoraバージョンで使用される初期化init
- systemd init、最新のFedora、Ubuntu、Debian、RHEL、SUSEバージョンで使用
伝統的に、Unixはinitと呼ばれるinit実装を使用していました。これsysVinit
はhttps://ru.wikipedia.org/wiki/UNIX_System_VバージョンのUnixの名前で呼び出されます。それは非常に影響力があり、他の初期化は後方互換性があります。
基本的に、sysVinitは最初に/etc/inittab
ファイルを読み取り、実行するランレベルを決定し、/etc/init.d/rc
いわゆるinitスクリプトを実行するようスクリプトに指示します。たとえば、通常はマルチユーザーランレベル(通常はUbuntuのランレベル2)で/etc/init.d/rc
起動すると、でスクリプトの実行を開始し/etc/rc2.d
ます。そこにあるファイルはスクリプトへのシンボリックリンクのみで、スクリプト自体は/etc/init.d
ディレクトリに保存されます。/etc/rc*.d
ディレクトリ内のこれらのシンボリックリンクの命名は次のとおりです。たとえば、次のスクリプトがあります/etc/rc2.d
:
$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager
つまり、ランレベル2のinitプロセスに切り替えるとnetwork-manager
、最初にプロセスが強制終了され、そのスクリプト名がK
- K02network-manager
で始まり、その後、名前がで始まるプロセスが開始されS
ます。S
またはの2桁K
は00から99までの数字で、プロセスを開始する順序を決定します。たとえば、16が17未満であるため、rsyslog
前apache2
に開始されます(これは理にかなっています。 、したがって、rsyslogを最初に起動する必要があります。スクリプトは、によって実行されるカジュアルなシェルスクリプト#!/bin/sh
です。
そのため、基本的にsysVinitスタイルで起動時にプログラムを開始するには、独自のスクリプトを作成し(任意の例からコピーアンドペーストします/etc/init.d
)、/etc/init.d
適切な名前(例:)でシンボリックリンクを作成
S99mytrojan
し/etc/rc2.d
ます。/etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.htmlにある典型的なsysVinitスクリプトの説明を次に示します。
現在、Ubuntuのメンバーは、initから追加の機能が必要であると判断しました。高速ブートOSが必要だったため、スクリプトを並行して実行したかったのです。デッドプロセスを自動的に再起動したかったのです。彼らは、プロセスがイベントによって明示的な方法でお互いを呼び出すことを望んでいました(したがって、Apacheは「syslog開始」イベントによって実行され、syslogは「ファイルシステムマウント」イベントなどによって実行されるので、いくつかの数字の代わりにイベント00があります-99)。このように、彼らは作った成り上がりと、ここではそれがどのように動作するかです。Upstart initscriptsは/etc/init
ディレクトリに置かれます(混同しないでください/etc/init.d
)。通常、Upstart /etc/init.d/rc
も実行されるため、sysVinitスクリプトを通常どおり実行します。ただし、終了時にスクリプトを再生成する場合は、Upstartイベントが最適です。
私のスクリプトが機能していることを確認することはできませんが、あなたの目的のために、次の/etc/init/mytrojan.conf
スクリプトを書く必要があると思います。
start on runlevel [02]
respawn
exec mytrojan --argument X
ただし、少なくともファイルシステムとネットワークの依存関係が必要な場合はstart on runlevel [02]
、次のようなものに置き換えるのが理にかなっています。
start on (local-filesystems and net-device-up IFACE!=lo)
警告:私はこれができないので、これの正確さをチェックしませんでした。特に、ネットワーク接続が起動して実行された後にスクリプトを起動する方法についてはよくわかりません(このバージョンを使用しました)。「up up on network up」のグーグルを試してください。