LoginSignup
0
0

UbuntuでCronを設定する

Last updated at Posted at 2023-07-03

定期的にサービスを再起動したい、バックアップを取得したい、そんな時役に立つのが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の再起動を実行します)

nginx-restart.sh
  #!/bin/bash
  sudo systemctl restart nginx.service
  

3. Cronの設定をする

Cronは、/etc/cron.dに設定ファイルを作成します。
/etcの下には、cron.dailycron.hourlycron.monthlycron.weeklyなど、Cronに関連したフォルダがいくつかありますが、実行タイミングは自分で設定するので、cron.dの下に配置する形で設定します。

> sudo vi nginx-restart
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分ごとに実行など、動作の確認ができます。

その場合の設定は、以下のとおりです。

Run every 5minutes
*/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の設定は、以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0