定期的にサービスを再起動したい、バックアップを取得したい、そんな時役に立つのがCron
です。
Cronは定期的にコマンドなどを実行してくれるサービスです。
今回は、EC2のUbutuインスタンスに設定してみました。
いろんな設定方法があるかと思いますが、今回は5ステップで設定できる方法です
(たぶん、最小ステップ、、、なはず、、、)
1. Cronが動いているかを確認する
まずは、稼働中のインスタンス上でCron
が動いているか確認してみます。
以下のように、"active(running)"になっていれば、サービスは動いています。
> sudo systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled)
Active: active (running) since Mon 2023-07-03 19:43:53 UTC; 2s ago
Docs: man:cron(8)
Main PID: 18708 (cron)
CGroup: /system.slice/cron.service
├─11338 /usr/bin/atop -a -w /var/log/atop/atop_20230703 600
└─18708 /usr/sbin/cron -f
Jul 03 19:43:53 ip-10-30-0-14 systemd[1]: Started Regular background program processing daemon.
Jul 03 19:43:53 ip-10-30-0-14 cron[18708]: (CRON) INFO (pidfile fd = 3)
Jul 03 19:43:53 ip-10-30-0-14 cron[18708]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
2. Cronで動かすプログラムを作成する
Cronで定期的に実行するプログラムを作成します。
私は、/usr/local/
にフォルダを作って、そこにプログラムを配置しました。
プログラムの実行権限は、chmodを使用し適切な権限を付与してください。
実行するプログラムはこんな感じです。(nginxの再起動を実行します)
#!/bin/bash
sudo systemctl restart nginx.service
3. Cronの設定をする
Cronは、/etc/cron.d
に設定ファイルを作成します。
/etc
の下には、cron.daily
、 cron.hourly
、cron.monthly
、cron.weekly
など、Cronに関連したフォルダがいくつかありますが、実行タイミングは自分で設定するので、cron.d
の下に配置する形で設定します。
> sudo vi nginx-restart
# Restart nginx service
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 毎週日曜日、5:30amに実行するように設定
30 5 * * 0 root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
動作の確認用に、> /var/log/cron-test.log
にログを出力しています。
4. Cron再起動
設定が終わったら、Cron
を再起動します。
> sudo systemctl restart cron
とりあえず実行できるかどうかを確認する場合には、Cronの設定を5分ごとに実行など、動作の確認ができます。
その場合の設定は、以下のとおりです。
*/5 * * * * root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
5. Cronが無事に再起動できたかを確認する
Restartが正常に完了したかどうかを、Status
コマンドで確認します。
> sudo systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled)
Active: active (running) since Mon 2023-07-03 19:43:53 UTC; 42min ago
Docs: man:cron(8)
Main PID: 18708 (cron)
CGroup: /system.slice/cron.service
├─11338 /usr/bin/atop -a -w /var/log/atop/atop_20230703 600
└─18708 /usr/sbin/cron -f
Jul 03 19:43:53 ip-10-30-0-14 systemd[1]: Started Regular background program processing daemon.
Jul 03 19:43:53 ip-10-30-0-14 cron[18708]: (CRON) INFO (pidfile fd = 3)
Jul 03 19:43:53 ip-10-30-0-14 cron[18708]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
[Tips] Cronの設定パターン
Cronは、5分おきに実行、1日1回実行など、実行タイミングを柔軟に設定することができます。
よくあるパターンをTipsとしてのせておきます!
# 1分ごと
* * * * * root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
# 5:00-5:59まで1分ずつ実行
* 5 * * * root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
# 毎日5:00に実行
0 5 * * * root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
# 毎月12日-20日5:00に実行
0 5 12-20 * * root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
# 毎週月曜日-金曜日5:30に実行
30 5 * * 1-5 root /usr/local/job/nginx-restart.sh > /var/log/cron-test.log 2>&1
Cronの設定は、以上です。