はじめに
指定した時間にバッチ実行できる仕組みを習得しました。今後困らないように備忘録としてまとめました。
cronとは
UNIX系OS(Linuxなど)に標準で搭載されている定期的な自動実行を行うための仕組み
GithubActionsでcronを使う
公式ドキュメントより引用
schedule イベントを使うと、スケジュールした時刻にワークフローをトリガーできます。
cronの基本的な書き方
cron: "分
時間
日
月
曜日([0,6]、0は日曜日)
"
name: delete-data-auto
on:
schedule:
- cron: "0 21 * * *"
workflow_dispatch:
jobs:
delete_data:
runs-on: ubuntu-latest
steps:
- run: echo "cron追加したよ"
他にもこんな設定ができる
X分ごとに1回実行する
最短5分毎にスケジュール実行することが可能
公式ドキュメントより引用
スケジュールされたワークフローを実行できる最短の間隔は、5 分ごとに 1 回です。
on:
schedule:
- cron: "*/5 * * * *" # 5分ごとに実行
,
区切りで複数時間設定可能
on:
schedule:
- cron: "0 21,17 * * *" # 21時と17時に実行
workflow_dispatch:
毎時間XX:00に実行する
on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
注意点
スケジュール時間はUTC
スケジュール時間は (UTC) で設定される。
UTC:協定世界時、世界で標準時として使っている時間
UTCは日本時間(JST)から9時間引いた値
例えば、午前6時に起動したい場合、06:00から9時間引いた21:00を設定
日本時間 6:00 → UTC 21:00(前日)
計算:6 - 9 = -3 → 24 + (-3) = 21
scheduleトリガーは遅延しがち
公式ドキュメントより引用
GitHub Actions のワークフローの実行によって高い負荷がかかっている間、schedule イベントが遅延する可能性があります。 高負荷の時間帯には、毎時の開始時点が含まれます。
今後は、repository_dispatch
を使うようにしたい。
おわりに
cronって聞いたことあるなあくらいの認識だったのですが、使いこなせるようになったことは大変嬉しいです。
日本時間とUTCを考慮しないといけないのは盲点でした。
参考