web-dev-qa-db-ja.com

1時間ごとにpythonスクリプトを再起動します

そのため、スクリプト名(python SCRIPTNAME.py)を入力するだけでターミナルで起動するpythonスクリプトがあります

単に停止してからpythonスクリプトを1時間ごとに開始するスクリプトまたはcronジョブを作成することは可能だろうかと思っています。

1
Mustillo

Pythonスクリプトを daemonize またはサービスを作成したいようです。これは、他のアプリケーションが適切な順序または適切なタイミングで起動する方法です。

Pythonスクリプト用にsystemdサービスを作成し、systemctlを介してサービスとインターフェイスする必要があります。

systemctl restart mypython
systemctl enable mypython

スクリプトをこのように動作させたら、cronをセットアップして必要なことを行うことができます。これはおそらくサービスを再起動するためです。

スクリプトの目的と、スクリプトが適切に実行されているかどうかを判断する能力に応じて、サービスを強化して、実行が停止したかどうかを報告するか、 monit などのソリューションを調べます。


指摘したように、 この回答 は有用な情報を提供しますが、rc.localなどの古いツールが含まれています。 systemdを使用する代わりに、プロセスのPIDを追跡し、そのプロセスを強制終了して1時間ごとにスクリプトを再実行できます。

2
earthmeLon

最善のアプローチは、次のようにGNU timeoutを使用することです。

timeout -k 3600 python3 /path/to/script.py

-kは「kill after」および秒単位の時間を表します。

したがって、スクリプトを1時間ごとに実行、終了、再起動するには、次のようにします。

while timeout -k 3600 python3 /path/to/script; do
   sleep 2
done

sleep 2は、再起動する前にわずかな遅延を追加するだけです


または、Pythonのスレッディングモジュールを使用して、スクリプトの関連部分をスケジュールすることを検討してください。 https://stackoverflow.com/a/50537798/3701431 を参照してください

2