init processを理解しようとしています。
3つのバックグラウンドプロセス(2つのシェルスクリプトとJavaアプリ)を起動するスクリプトがあります。コマンドラインからは問題なく動作します。
起動時にそのスクリプトを実行したいと思います。
/etc/init.d/skeleton
は、単一のプロセスを探していたため、私には意味がありませんでした。そして、ほとんどのinitスクリプトは非常に複雑に思えるので、失くしてしまいました。
本当にやりたいことは:
#!/bin/bash
/opt/myapp/bin/my_start_script
それがスタートアップで起こっただけなら、私はとても幸せです。
GUIを使用する場合は、Ubuntuのスタートアップアプリケーションアプリケーションにリンクを追加できます。この欠点は、GUIにログインしたときにのみ実行されることです(つまり、他のユーザーではなく、Ubuntuデスクトップ環境にログインしない場合ではありません)。
コマンドラインを使用すると、Ubuntuデスクトップがロードされる前にスクリプトを実行できます。
これを行うには、スクリプトを実行可能にし、/etc/init.d
にコピーし、デフォルトのマルチユーザーランレベル(ランレベル2)で実行する場合は、/etc/rc2.d
にスクリプトへのシンボリックリンクを作成します。名前をSに変更し、その後に実行する順序を、他のリンクごとに変更してください。
スクリプトを実行可能にする:
Sudo chmod u+x myscript.sh
/etc/init.d
にコピーします:
Sudo cp myscript /etc/init.d
Rc2.dでシンボリックリンクを作成します。
cd /etc/rc2.d
Sudo ln -s /etc/init.d/myscript.sh
命名スキームに従って名前を変更します。
Sudo mv myscript.sh S70myscript.sh
詳細については、/etc/init.d
および/etc/rc2.d
のREADMEファイルを参照してください。
System V Initスクリプトは非推奨であり、よりシンプルであるため、Upstartを使用します。
このファイルmy_script.conf
を/etc/init
に配置するだけです
# Start when pc starts up
start on runlevel [2345]
# Stop when pc shuts down
stop on runlevel [016]
# Start Script
exec my_start_script
# Stop Script
pre-stop my_stop_script
pre-stop
には、3つのプロセスを強制終了するコードがスクリプトとして含まれます。サービスが停止すると、sigtermはmy_start_scriptプロセスに送信されますが、スクリプトによっては既に終了している場合があります。
Sudo service my_script start
およびSudo service my_script stop
を実行して、新しいサービスをテストできます