インフラ

安全にcron設定を変更するためのTips

こんにちは、ちゃりおです。

Ansibleなど構成管理を使っていない環境で、cronの変更を安全に行うためのTipsを紹介します。
結論「ファイルにして、Diff取って、ログを見る」という基本的な内容ではありますが、参考になれば幸いです。

Contents

cron設定変更のTips

サンプルコマンド実行した環境は、AmazonLinux2です。

ファイルで管理する

「crontab -e」で直接変更することも可能ですが、直接編集はtypoなどが発生しがちです。
できるだけ、crontabの中身はファイルで管理しましょう。

「crontab <ファイル>」を実行することで、ファイルの中身をcrontabに反映することができます。
(追記する形ではなく、上書きする形なので確実にファイルの内容になる。)

ファイル保存しておくことで、Gitなどバージョン管理ツールで管理しやすくなります。

$ crontab -l
*/1 * * * * echo hoge
$ cat test-crontab.txt
*/1 * * * * echo fuga
$ crontab test-crontab.txt
$ crontab -l
*/1 * * * * echo fuga

Diffを確認する

一時的にジョブを止めている可能性もあるので、反映前にはファイルとcrontabの中身でdiffを取りましょう。


$ diff -u <(crontab -l) test-crontab.txt
--- /dev/fd/63  2021-12-26 00:26:47.265654864 +0000
+++ test-crontab.txt    2021-12-26 00:19:18.312078645 +0000
@@ -1,2 +1,2 @@
-#*/1 * * * * echo fuga
+*/1 * * * * echo fuga

ログを確認する

「/var/log/cron」でcronが実際にトリガーされたか確認できます。

$ tail -f /var/log/cron 
Dec 26 00:26:01 ip-10-0-40-93 CROND[2634]: (ec2-user) CMD (echo c)

しかし上記では、トリガーされたジョブが実際に成功/失敗したかはわかりません。
cronファイルの方で、実行結果をログに出力するなどしておく必要があります。
色々方法はあると思いますが、以下はファイルに追記する方法です。


$ crontab -l
*/1 * * * * echo fuga >> test-crontab.log 2>&1
$ cat test-crontab.log
fuga
fuga
fuga

まとめ

cronを安全に設定変更するためのTipsでした
crontabの設定内容をファイルにして保存することで、バージョン管理ツールに含めれたりdiffが見やすかったり、色々メリットがあります。
本番で運用する際は、ファイルにして保存することがおすすめです。

参考 cron周りのベストプラクティス

awsロゴ
curlの--aws-sigv4を使って、IAMロールでアクセス制限したOpenSearch(旧: ElasticSearch)にリクエストするこんにちは、ちゃりおです。 curlでAWSの署名を含んだリクエストができるようになったことを最近知りました。 curl 7.75...
itエンジニア論理
【書評】ITエンジニア的論理思考テクニック!こんにちは、ちゃりおです。 今回紹介する本は、ITエンジニア向けの論理的思考の本です。 論理的思考について書かれた本は山のようにある...
OpenVPN
OpenVPNでIPアドレスが重複して通信が不安定になった話こんにちは、ちゃりおです。 OpenVPNの設定の失敗談です。 OpenVPNでVPN接続した際に、どうも通信が不安定でした。 pi...