GNU/Linux >> Linux の 問題 >  >> Linux

bash スクリプトをデーモンとして実行する

/etc/init.d/ に移動すると、スケルトンと呼ばれるデーモン テンプレートが表示されます。

これを複製して、start 関数の下にスクリプトを入力できます。


デーモンは、インタラクティブなユーザーが直接制御するのではなく、バックグラウンド プロセスとして実行される単なるプログラムです...

[以下の bash コードは Debian システム用です - Ubuntu、Linux Mint ディストリビューションなど]

簡単な方法:

簡単な方法は、/etc/rc.local ファイルを編集して、そこからスクリプトを実行することです (つまり、システムを起動するたびに):

sudo nano /etc/rc.local

以下を追加して保存します:

#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &

これを行うより良い方法は、Upstart を介してデーモンを作成することです:

sudo nano /etc/init/TheNameOfYourDaemon.conf

以下を追加してください:

description "My Daemon Job"
author "Your Name"
start on runlevel [2345]    

pre-start script
  echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script

exec /bin/sh TheNameOfYourScript.sh > /dev/null &

これを保存してください。

問題がないことを確認します:

init-checkconf /etc/init/TheNameOfYourDaemon.conf

マシンを再起動します:

sudo reboot

システムを起動すると、デーモンが実行中であることを示すログ ファイルが表示されます。

cat  /var/log/TheNameOfYourDaemonJobLog.log

• 次の方法でデーモンの開始/停止/再起動/ステータスを取得できます:

restart:サービスを停止してから開始します

sudo service TheNameOfYourDaemonrestart restart

開始:サービスが実行されていない場合、これによりサービスが開始されます

sudo service TheNameOfYourDaemonstart start

停止:実行中のサービスを停止します

sudo service TheNameOfYourDaemonstop stop

ステータス:サービスのステータスが表示されます

sudo service TheNameOfYourDaemonstatus status

シェルから完全なデーモンとして実行するには、 setsid を使用する必要があります その出力をリダイレクトします。出力をログファイルまたは /dev/null にリダイレクトできます それを破棄します。スクリプトの名前が myscript.sh であるとすると、次のコマンドを使用します:

setsid myscript.sh >/dev/null 2>&1 < /dev/null &

これにより、現在のシェル (stdin、stdout、および stderr) からプロセスが完全に切り離されます。出力をログファイルに残したい場合は、最初の /dev/null を置き換えます /path/to/logfile と一緒に。

出力をリダイレクトする必要があります。そうしないと、真のデーモンとして実行されません (出力の読み取りと書き込みはシェルに依存します)。


Linux
  1. Bashスクリプトをデバッグする方法は?

  2. Linux で Python スクリプトをサービスまたはデーモンのように実行する方法

  3. PHPスクリプトをデーモンプロセスとして実行

  1. LinuxのbashコマンドをPERLスクリプトで実行する方法は?

  2. ログイン後に bash スクリプトを実行する

  3. EC2 インスタンスの起動後に bash スクリプトを実行する

  1. Init.dスクリプトが起動時に実行されていませんか?

  2. Pythonスクリプトをサービスとして実行するには?

  3. bash.sh で cron を実行する権限が拒否されました