2017-08-15 15 views
3

私はcronジョブから実行したいPythonスクリプトを持っています。 。cronjobでPythonプロセスを実行し、それが毎分実行されていることを確認します。

cronジョブがある:

/usr/bin/python2.7 /home/mydir/public_html/myotherdir/script.py 

あり、この上のいくつかの情報があるが、ほとんどの答えは明確に本当に細部完全なプロセスをしません、例えば:

例えば

Using cron job to check if python script is running

この場合、初期プロセスの実行方法とPIDの記録方法は記載されていません。残念ながら、私には多くの質問が残されています。

したがって、誰でも私にこれを行う方法の簡単なガイドを与えることができますか?

フル・シェル・スクリプトが必要かどうか、スクリプトを開始するコマンド、などがあります。

+0

可能な重複https://stackoverflow.com/questions/2366693/run- cron-job-only-if-it-is-already-running) –

+0

私はcronから実行しません。 O/Sキックオフスクリプト(Linuxの場合はIinit.d)の一部としてサーバープロセスを作成し、障害またはクラッシュ時に再起動するように構成します。私は10年以上これをやっていないので、私はスタック交換のserverfaultをこれを研究することをお勧めしたいと思います。 sysの管理者の質問の多く。 – LAS

答えて

3

それほど難しいことではありません。まずチェッカー毎分実行するようにcrontabを設定:/home/mydir/check_and_start_script.shで今

* * * * * /home/mydir/check_and_start_script.sh 

#!/bin/bash 
pid_file='/home/mydir/script.pid' 
if [ ! -s "$pid_file" ] || ! kill -0 $(cat $pid_file) > /dev/null 2>&1; then 
    echo $$ > "$pid_file" 
    exec /usr/bin/python2.7 /home/mydir/public_html/myotherdir/script.py 
fi 

をこれは、スクリプトの最後の実行のプロセスIDを持つファイルがありますかどうかを確認します。存在する場合は、pidを読み取り、プロセスがまだ実行中かどうかをチェックします。そうでなければ、現在実行中のシェルのpidをファイルに入れ、同じプロセスでpythonスクリプトを実行してシェルを終了します。それ以外の場合は何もしません。

スクリプトを実行可能にするために忘れてはいけない

chmod 755 /home/mydir/check_and_start_script.sh 
[それはまだ実行されていない場合にのみ実行してcronジョブ](の
1

は、あなたが実際にステップを取り戻すと、なぜあなたはそれ

にやっていると考えるべきで、あなたが実際にcronからあなたlong_runningプログラムを起動する必要がありますか?私が尋ねる理由は、あなたのlong_runningプログラムを起動する別のプログラム(ウォッチャー)を書くことです。私はあなたが実際にあなたのlong_runningプログラムを開始するためにcronを必要としないことをあなたが見てくれることを願っています。

これは、ウォッチャーが毎分起動し、実行されていない場合はlong_runningプログラムを開始することです。

ここでは、これを実行する方法がたくさんあるので、実際に何をしようとしているのかを実際に理解する必要があります。これが運動の監視者であれば、psを呼び出すことができます。おそらく

あなたは別のツールを使用する必要がありますが - bashで、あなたが名前だけでmyprognameを交換し、バックグラウンドであなたのlong_runningコードを起動するコマンドでそれを実行し

[ -z "$(ps -ef | grep -v grep | grep myprogname)" ] && { echo runit; } 

を行うことができます。 systemd、daemontoolsなど

関連する問題