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