私は、任意に、汎用スクリプトやコマンドを有効にすることができますdaemonizerたいデーモンを。
対処したい2つの一般的なケースがあります。
永久に実行する必要があるスクリプトがあります。停止した場合(または再起動時)、再起動します。同時に2つのコピーが実行されないようにしてください(コピーが既に実行されているかどうかを検出し、その場合は起動しないでください)。
単純なスクリプトまたはコマンドラインコマンドがあり、それを永久に繰り返し実行し続けたいと思っています(実行と実行の間に少し間を置いて)。この場合も、スクリプトの2つのコピーが同時に実行されないようにしてください。
もちろん、ケース2のスクリプトの周りに「while(true)」ループを記述して、ケース1のソリューションを適用するのは簡単ですが、より一般的なソリューションは、ケース1のスクリプトに適用されるため、ケース2を直接解決するだけです。ウェル(スクリプトがスクリプトが本当にあれば、これまで当然のことながら(死ぬために意図されていない場合、あなただけの短い、あるいはまったく一時停止をすることができず、一時停止が実際に問題ではない、その後死ぬことはありません))。
ソリューションには、たとえば、既存のスクリプトにファイルロックコードやPID記録を追加する必要がないことに注意してください。
より具体的には、次のように実行できるプログラム「デーモン化」が欲しい
% daemonize myscript arg1 arg2
または、例えば、
% daemonize 'echo `date` >> /tmp/times.txt'
これにより、times.txtに追加される日付のリストが増え続けます。(daemonizeの引数が上記のケース1のように永久に実行されるスクリプトである場合、daemonizeは引き続き正しく機能し、必要に応じて再起動します。)次に、上記のようなコマンドを.loginに追加できます。および/またはそれを1時間ごとまたは1分ごとにcronする(私がそれが予期せず死ぬことについてどれほど心配していたかによる)。
注意:デーモン化スクリプトは、デーモン化しているコマンド文字列を覚えておく必要があります。これにより、同じコマンド文字列が再度デーモン化されても、2番目のコピーは起動されません。
また、このソリューションはOS XとLinuxの両方で理想的に機能するはずですが、どちらか一方のソリューションは歓迎されます。
編集:で呼び出す必要がある場合は問題ありませんsudo daemonize myscript myargs
。
(私がこれをすべて間違っていると思っている場合、または迅速で汚い部分的な解決策がある場合は、それも聞きたいです。)
PS:それは便利だ場合は、ここにあるのpythonに似た質問特定。
そして、同様の質問に対するこの回答には、任意のスクリプトを素早く汚い悪魔化するための有用なイディオムがあるようです。