PR

毎日深夜に自動で動くスクリプトを作る!~crontabからsystemd Timerへ移行~

サーバ

こんにちは、納戸工房です!

今回はcrontab を使った方法から systemd Timer に移行する方法をletsencryptの証明書の更新に使っていたcrontabスクリプトを元に説明します!


今回の課題

毎日深夜0時にSSL証明書を更新するスクリプトを実行したい!
もともとは以下のようなcrontab設定で動かしていました:

0 0 * * * bash /tmp/letsencrypt.sh

この設定を systemd Timer に変更し、さらに柔軟で便利な管理ができるようにしていきます。


手順:Timerを使った設定方法

サービスファイルを作成する

まず、スクリプトを実行するための「サービスファイル」を作ります。以下の内容を /etc/systemd/system/letsencrypt-renew.service という名前で保存します。

[Unit]
Description=Run Let's Encrypt renewal script
Wants=letsencrypt-renew.timer

[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/letsencrypt.sh

[Install]
WantedBy=multi-user.target

タイマーファイルを作成する

次に、実行スケジュールを定義する「タイマーファイル」を作ります。/etc/systemd/system/letsencrypt-renew.timer に以下の内容を記述します。

[Unit]
Description=Run Let's Encrypt renewal script daily at midnight

[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true

[Install]
WantedBy=timers.target

ここでの OnCalendar=*-*-* 00:00:00 が「毎日深夜0時」の実行を指定しています。

設定を反映してタイマーを有効化

以下のコマンドを順に実行して設定を反映します。

sudo systemctl daemon-reload
sudo systemctl enable letsencrypt-renew.timer
sudo systemctl start letsencrypt-renew.timer

設定が正しく反映されているか確認するには以下を実行:

sudo systemctl list-timers --all

完成!

これで、毎日深夜0時になると自動的にLet’s Encryptの証明書更新スクリプトが実行されるようになりました! systemd Timer を使うと、失敗時の再実行やログ確認が簡単になるので便利です。

コメント

タイトルとURLをコピーしました