web-dev-qa-db-ja.com

pythonプログラムを別のpythonプログラムから実行するようにスケジュールするにはどうすればよいですか?

LinuxサーバーでPythonプログラムを実行していますが、外部データによっては、今からxx分または数時間後に再度実行する必要があります。

したがって、午前6時に実行し、午前7時に再度実行する必要があるとします。次に、午前7時にいくつかのことをチェックし、15:45に再度実行し、翌日の午前2.05に実行し、翌日の午前4.05に実行する必要があります。

実行する必要がある時間には事前定義されたロジックがないことがわかるように、実行時に定義する必要があります。

私が知っている唯一のタスクスケジュールメカニズムはcrontabですが、crontab -eを実行せずにタスクを追加する方法がわかりません。さらに、crontabは、定期的なタスクや私の場合、crontabジョブを追加し、実行後にもう一度削除して、新しいジョブを追加します。

私が思いついた唯一のことは、テキストファイルに次の実行日を設定し、crontabジョブに毎分チェックさせて、プログラムを実行する時間かどうかを確認することでした。

2
Michel

crontabは、定期的に繰り返したいジョブに使用する必要があります。別の方法は at です。このユーティリティを使用すると、一度だけ実行したいジョブを将来的にスケジュールすることができます。

python-スクリプト内から、atのキューにコマンドを追加できるはずです。リンクページとman-ページは、始めるのに十分な情報を提供するはずです。

@Michelのコメントによると、これは

newruntime = (datetime.datetime.now() + datetime.timedelta(minutes=5)).strftime("%H:%M %d.%m.%Y")
command = 'echo " python mainprog.py" | at ' + newruntime
os.system(command)
1
Bernhard

Python-crontab モジュールは有望に見えます。タスクの追加と削除が簡単です。

また、 thread @ stackoverflow があり、さらにいくつかの便利なアイデアとリンクがあります。

2
Kamiccolo

time.sleep() は機能しませんか?つまり、sleep()を待機する秒数を渡してから、スクリプトの実行を再開させることはできませんか(ループの最後で条件付きスリープを実行することによって)?これにより、他のいくつかの提案で必要とされる外部依存関係の数が減ります。

0
Bratchley