🗒️
WindowsのタスクスケジューラでPythonファイル実行失敗時に再試行したかった
タイトルの通りです。
出来ませんでした(落胆)
うちのchatGPTは「タスクスケジューラの再起動の設定を有効にして、sys.exit(1)で終了すればおk」なんでうそぶいていましたが、うまくいかないみたいです。
😞😞😞
今非常に不安定なプログラムを定期実行しており、仕事帰りにエラーでげんなりすることが多いので、期待していたんだけどなー。
そもそも不安定なプログラムを作るなといえばその通りなのですが、やりたいことを低コストでやろうとするといくつかのアプリケーションを経由する必要があってぇ(ゴニョゴニョ)
申し訳程度の対策
プログラム内で再実行することにしました。
下は実装例です。(main()がメインの処理)
from pathlib import Path
import time
import traceback
import datetime
if __name__ == '__main__':
def log_error(e):
error_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
error_message = traceback.format_exc()
with open(Path(__file__).parent/"error_log.txt", "a") as log_file:
log_file.write(f"Error Time: {error_time}\n")
log_file.write(f"Error Details:\n{error_message}\n")
log_file.write("-------------------------------------------------\n")
# 仕方がないのでシステム内で再実行
TRY_NUM = 3
WATE_SEC = 60
for _ in range(TRY_NUM):
try:
main()
break
except Exception as e:
log_error(e)
time.sleep(WATE_SEC)
Discussion