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