🗒️

WindowsのタスクスケジューラでPythonファイル実行失敗時に再試行したかった

2024/01/04に公開

タイトルの通りです。

出来ませんでした(落胆)

うちの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