ように私は私のPHPスクリプトを実行するスクリプト、各Xの時間を持っている:実行bashスクリプトデーモン
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
は、どのように私はデーモンとして、それを起動することができますか?
ように私は私のPHPスクリプトを実行するスクリプト、各Xの時間を持っている:実行bashスクリプトデーモン
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
は、どのように私はデーモンとして、それを起動することができますか?
シェルからフルデーモンとして実行するには、setsid
を使用して出力をリダイレクトする必要があります。出力をログファイルまたは/dev/null
にリダイレクトして破棄することができます。次のコマンドを使用し、あなたのスクリプトがmyscript.shと呼ばれていると仮定:
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
これは完全にあなたの現在のシェル(STDIN、stdoutとstderr)からプロセスを切り離します。出力をログファイルに保存する場合は、最初の/dev/null
を/ path/to/logfileに置き換えます。
出力をリダイレクトする必要があります。そうしないと、真のデーモンとして実行されません(出力に読み書きするシェルによって異なります)。
/etc/init.d/に行くことができます。スケルトンと呼ばれるデーモンテンプレートが表示されます。
それを複製して、開始機能の下にスクリプトを入力することができます。
また、バックグラウンドでスクリプトを実行することを検討することもできます最後に '&'を追加するか、nohupで実行してください。 –
@LuisMuñozどうすれば自動的にバックグラウンドで実行させることができます。たとえば、/etc/init.d/mysql startを実行すると、デーモンはデフォルトでバックグラウンドで起動して実行されます。 –
@DavidOkwiiは、コードを関数に置き、バックグラウンドで実行します。この質問に追加された私の答えをチェックしてください。 –
Aデーモン
[以下のbashコードはDebianシステムのためのものである...むしろインタラクティブユーザの直接制御下にあるよりも、バックグラウンドプロセスとして実行だけプログラムである - のUbuntu、Linuxのミントディストリビューションとそう簡単な方法
]上:
簡単な方法は、あなたの/etc/rc.localのファイルを編集して、そこからスクリプトの実行を持っているだろう(つまり、毎回あなたは、システムを起動) :
sudo nano /etc/rc.local
次の行を追加し、保存します。
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
これを行うには良い方法は成り上がり経由でデーモンを作成するには、次のようになります。
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 &
これを保存します。
は、それがOKに見えることを確認します。
init-checkconf /etc/init/TheNameOfYourDaemon.conf
は今、マシンを再起動:
sudo reboot
今、あなたのシステムを起動するとき、あなたはあなたのデーモンが動作していることを示すログファイルを見ることができます:
cat /var/log/TheNameOfYourDaemonJobLog.log
•ここから、あなたのデーモンの状態を開始/停止/再起動/取得できます。 :
再起動:これは
sudo service TheNameOfYourDaemonrestart restart
開始サービスを開始し、その後、停止します。この意志:それは
sudo service TheNameOfYourDaemonstart start
停止を実行していない場合、これは、サービスを開始しますサービスが停止している場合は、サービスを停止してください。
sudo service TheNameOfYourDaemonstop stop
の
状況:これはサービスのステータスを表示します
sudo service TheNameOfYourDaemonstatus status
別のクールなトリックは
でサブシェルを実行name(){
echo "Do something"
sleep 1
}
# put a function in the background
name &
#Example taken from here
#https://bash.cyberciti.biz/guide/Putting_functions_in_background
かかわらず、常に、バックグラウンドでの機能やサブシェルを実行することは不可能です背景
(echo "started"; sleep 15; echo "stopped") &
どうすればそれを殺すのですか? –
あなたはそれがpidであることを発見し、それに信号を送る必要があります。 LinuxシステムのUNSAFEの例を以下に示します: 'kill $(ps -fade | grep myscript.sh | grep -v grep | awk '{print $ 2}')'。これにより、名前やパラメータに "myscript.sh"を含むすべてのプロセスが強制終了されるため、使用するのはあまり安全ではありませんが、必要に応じて調整することができます。 – micromoses
ありがとう、これは役に立ちます! '2>&1 dev/null'が何をしているのか説明してください。 –