Skip to content

cron では無く、systemd で定期実行を定義する

Amazon Linux 2 と Amazon Linux 2023 を比較したドキュメントの Task scheduling に記載がありますが、Amazon Linux 2023 には標準で cron がありません。

The cronie package was installed by default on the AL2 AMI, providing support for the traditional crontab way of scheduling periodic tasks. In AL2023, cronie is not included by default. Therefore, support for crontab is no longer provided by default.

You can optionally install the cronie package to use classic cron jobs. We recommend that you migrate to systemd timers due to the added functionality provided by systemd.

Amazon Linux 2023 で cron を利用出来るようにする に書いた通り、cron を追加することも出来ますが、systemd を使って定期実行を実現することも可能です。

検証環境

以下の環境で検証しました。

対象 バージョン
Amazon Linux 2023

systemd による定期実行設定の流れ

定期実行の設定を行う場合、従来の cron であれば「一箇所に設定を行う」で完結していました。 ですが、systemd で設定する場合は以下の 2 段階に分けて設定する必要があります。

  1. ジョブを呼び出す .service ファイルの定義
  2. 定期実行処理を定義する .timer ファイルの定義

定期実行ジョブを設定してみる

実際に定期実行ジョブを設定してみます。 今回は job1 という名称にします。 この場合、以下の 2 ファイルを定義することになります。

No. 種別 ファイルパス
1 service /etc/systemd/system/job1.service
2 timer /etc/systemd/system/job1.timer

今回は以下の内容でふたつのファイルを新規作成しました。

/etc/systemd/system/job1.service

1
2
3
4
5
6
7
8
9
[Unit]
Description = Job1

[Service]
Type = oneshot
ExecStart = /usr/bin/date

[Install]
WantedBy = multi-user.target

/etc/systemd/system/job1.timer

1
2
3
4
5
6
7
8
9
[Unit]
Description = Job1 Timer

[Timer]
OnCalendar = *-*-* *:00/1:00
AccuracySec = 1s

[Install]
WantedBy = timers.target

定期実行タスクの開始

service を手動で追加したときと同様、systemctl daemon-reload を実行したあと、timer を開始します。 具体的には以下を実行します。

1
2
3
systemctl daemon-reload
systemctl enable job1.timer
systemctl start job1.timer

ログの確認

systemd から起動されている為、ログは journalctl で一括して管理・閲覧することが出来ます。 job1 timer に限定してログを確認するには以下のように実行します。

1
journalctl -eu job1

tail -f のイメージで、リアルタイムにログを確認するには以下のように実行します。

1
journalctl -fu job1