web-dev-qa-db-ja.com

既存の起動スクリプトを実行するinitスクリプトを作成する方法は?

init processを理解しようとしています。

3つのバックグラウンドプロセス(2つのシェルスクリプトとJavaアプリ)を起動するスクリプトがあります。コマンドラインからは問題なく動作します。

起動時にそのスクリプトを実行したいと思います。

/etc/init.d/skeletonは、単一のプロセスを探していたため、私には意味がありませんでした。そして、ほとんどのinitスクリプトは非常に複雑に思えるので、失くしてしまいました。

本当にやりたいことは:

#!/bin/bash
/opt/myapp/bin/my_start_script

それがスタートアップで起こっただけなら、私はとても幸せです。

2
David Parks

GUIを使用する場合は、Ubuntuのスタートアップアプリケーションアプリケーションにリンクを追加できます。この欠点は、GUIにログインしたときにのみ実行されることです(つまり、他のユーザーではなく、Ubuntuデスクトップ環境にログインしない場合ではありません)。

コマンドラインを使用すると、Ubuntuデスクトップがロードされる前にスクリプトを実行できます。

これを行うには、スクリプトを実行可能にし、/etc/init.dにコピーし、デフォルトのマルチユーザーランレベル(ランレベル2)で実行する場合は、/etc/rc2.dにスクリプトへのシンボリックリンクを作成します。名前をSに変更し、その後に実行する順序を、他のリンクごとに変更してください。

  1. スクリプトを実行可能にする:

    Sudo chmod u+x myscript.sh

  2. /etc/init.dにコピーします:

    Sudo cp myscript /etc/init.d

  3. Rc2.dでシンボリックリンクを作成します。

    cd /etc/rc2.d

    Sudo ln -s /etc/init.d/myscript.sh

  4. 命名スキームに従って名前を変更します。

    Sudo mv myscript.sh S70myscript.sh

詳細については、/etc/init.dおよび/etc/rc2.dのREADMEファイルを参照してください。

3
Omegamormegil

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を実行して、新しいサービスをテストできます

4
Ciaran Liedeman