私はPythonで書かれたプログラムを持っています。私のプログラムは、毎分いくつかの金融ウェブサイトで値を掻き取り、その値を私のデータベースにプッシュします。私のプログラムは操作を実行するのに約1秒または最大1.5秒かかります。毎分私のプログラムを呼び出すためにcronジョブを設定しました。毎日午前9時から午後4時まで、この方法でプログラムを実行する必要があります。時々、午前9時から午後4時の間にいつでもプログラムを停止してプログラムを終了する必要があります。どうすればいいですか?
~によるとこのリンク
試してみましたが、ps -o pid,sess,cmd afx | grep -A20 "cron$"
数秒で作業が完了したため、リストに私のプログラムが見つかりませんでした。
引用するこれ私はそれを試み、/etc/init.d/cron stop
これはpkill cron
私が望んでいないすべてのクローンの仕事を殺しました。私はUbuntu Linuxでこのクローンを実行しています。
答え1
通常、システムcron
デーモンを停止して起動するのは悪い考えです。その行をコメントアウトすることは必ずしも便利ではないので、ここにいくつかの関連する代替方法があります。
セマフォの使用
この要件に対する解決策の1つは、セマフォ(またはフラグ)を使用してスクリプトの実行が許可されているかどうかを示すことです。この場合、セマフォはファイルの存在としてシグナルを受け取ることがあります。ファイルが存在するとスクリプトは実行されず、そうでない場合は実行されます。 (もちろん、ファイルが存在する場合にのみスクリプトが実行されるようにテストを逆にすることもできます。)
cron
以下は、セマフォ検査を含む項目の例です。
* * * * * test ! -f /tmp/stop && /path/to/script...
スクリプトの実行を停止するには、を実行しますtouch /tmp/stop
。やり直すにはrm /tmp/stop
。
テストを元に戻すには、ファイルで次のテストを使用します/tmp/run
。
* * * * * test -f /tmp/run && /path/to/script...
権限のある人だけがスクリプトを停止(または起動)状態で表示できるように、実際には別のセマフォファイルを使用できます。 1つのオプションは"$HOME"/.scriptname.stop
というスクリプトを使用することですscriptname
。
コード実行の防止
スクリプトが実行可能で呼び出された場合は、/path/to/script...
実行権限を削除するか、別の場所に移動してスクリプトの実行を停止してください。
chmod a-x /path/to/script
または
mv /path/to/script{,.stop} # i.e. mv /path/to/script /path/to/script.stop
cron
これは、コードを実行しようとするたびにビルドエラーが発生する迅速で見苦しい修正です。通常、これらのエラーはキャッチされてcron
ジョブ所有者に電子メールで送信されるため、スクリプトを実行する前にいくつかのテストを実行すると、このエラーが表示されるのを防ぐことができます。
* * * * * test -x /path/to/script && /path/to/script...
答え2
cronデーモンはシステムに必要な多くのタスクを実行するため、シャットダウンしないでください。代わりにcrontabファイルを編集し、スクリプトに関連するcronジョブをコメントアウトしてください。 (参考として編集後にcronデーモンを再起動する必要はありません。)
答え3
私が考える最も簡単な方法は、crontabを編集してcronjobをコメントアウトすることです。
クローンタブを開きます。
crontab -e
#
cronjob行をコメントアウトします。
答え4
Pythonプログラムを編集し、まず「実行しない」ファイルを確認してください。そのようなファイルがある場合は、プログラムを終了してください。
import os.path
if os.path.isfile('/tmp/disable_mypython'): exit()
たとえば、名前付きファイルを調べる場合は、/tmp/disable_mypython
次のコマンドを使用してプログラムを簡単に「無効にする」ことができます。
touch /tmp/disable_mypython
以下を使用して再度有効にします。
rm /tmp/disable_mypython