systemd タイマーの使い方:Amazon Linux 2023はデフォルトでcronが使えない

最終更新 2026年3月20日 最終更新者 administrator

従来のAmazon Linux 2では、cronがデフォルトで使えましたが、Amazon Linux 2023ではデフォルトでcronをサポートしません。

Amazon Linux 2023ではcronではなく、systemdタイマーの利用がおすすめされています。

AL2023 では、オプションで cronie パッケージをインストールして元の cron ジョブを使用できます。systemd には機能が追加されているため、systemd タイマーに移行することをお勧めします。

Amazon Linux の将来のバージョン (おそらく次回のメジャーバージョン) には、クラシック cron ジョブのサポートが含まれなくなり、systemd タイマーへの移行が完了する予定です。cron からの移行をお勧めします。

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/deprecated-al2023.html#deprecated-cron

Amazon Linux 2023でcronを使うには以下のコマンドでcronieをインストールしないとデフォルトでは使用できません。上述の通り、将来的にcronをAmazon Linux 2023がサポートしなくなる可能性があるためsystemdタイマーへの移行がおすすめです。

# dnf install cronie

cronie パッケージは AL2 AMI にデフォルトでインストールされ、定期的なタスクをスケジューリングする従来の crontab 方法をサポートしています。AL2023 では、cronie はデフォルトで含まれていません。したがって、crontab のサポートはデフォルトでは提供されなくなりました。

オプションで cronie パッケージをインストールして元の cron ジョブを使用できます。systemd には機能が追加されているため、systemd タイマーに移行することをお勧めします。

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/cron.html

Amazon Linux 2023ではsystemd.timerが推奨される 

前述の通り、デフォルトではAmazon Linux 2023にはcronieがインストールされず、公式ドキュメントでもsystemd タイマーの使用がおすすめされています。

AL2023 では、オプションで cronie パッケージをインストールして元の cron ジョブを使用できます。systemd には機能が追加されているため、systemd タイマーに移行することをお勧めします。

Amazon Linux の将来のバージョン (おそらく次回のメジャーバージョン) には、クラシック cron ジョブのサポートが含まれなくなり、systemd タイマーへの移行が完了する予定です。cron からの移行をお勧めします。

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/deprecated-al2023.html#deprecated-cron

systemd.timerの使い方

以下のドキュメントを参考に、systemd.timerの使い方をまとめます。

https://man7.org/linux/man-pages/man5/systemd.timer.5.html

ちなみにAWS公式ドキュメントでは、systemd.timerの詳しい使い方に関するドキュメントが見つかりませんでした・・・。

上記のLinuxのmanコマンドで確認できる通称オンラインマニュアルの内容に従ってsystemd.timerの使い方の手順をまとめると以下のようになります。

  1. /etc/systemd/system/に「sample.service」といった.serviceファイルを作成する
  2. /etc/systemd/system/に「sample.timer」といった.timerファイルを作成する
  3. systemctl start sample.timerコマンドを実行してタイマーを起動する
  4. OS起動時に自動でtimerファイルが起動するよう設定する

実際にNGINXが1日1回自動で再起動するように設定してみる

実際にNGINXを1日1回深夜2時に再起動するよう設定を行う例を示します。

nginx-restart.serviceファイルを/etc/systemd/system/に作成する

まずは/etc/systemd/system/に「nginx-restart.service」を作成します。ファイル名を「nginx.service」にすると、おおもとのNGINXのサービス(nginx.service)に影響を与えてしまうため、ファイル名を「nginx-restart.service」とします。

# vi /etc/systemd/system/nginx-restart.service
[Unit]
Description="Restart NGINX"

[Service]
User=root
Type=oneshot
ExecStart=/usr/bin/systemctl restart nginx

Descriptionはファイルの説明で、処理には影響を与えません。

[Service]のUserに実行するユーザーを、ExecStartに実行するコマンドを書きます。上記の例ではsystemctl restart nginxをrootユーザーで実行するように処理を書きましたが、「ExecStart=/bin/bash <実行するスクリプト(.shファイル)のフルパス>」という書き方でスクリプトを指定して定期的に実行することもできます。

Type=oneshotは一度だけ指定のコマンドを実行するパラメータです。連続して「/usr/bin/systemctl restart nginx」が実行されるのを防ぎます。

nginx.timerファイルを/etc/systemd/system/に作成する

次に先ほど.serviceファイル(nginx-restart.service)を作成した場所と同じ場所に.timerファイルを作成します。

# vi /etc/systemd/system/nginx.timer

毎時午前2時にNGINXを再起動させます。

[Unit]
Description=nginx restart daily

[Timer]
OnCalendar=*-*-* 02:00:00
Unit=nginx-restart.service

[Install]
WantedBy=timers.target

OnCalendarパラメータにいつ何を実行するのか指定します。以下のようにパラメータは対応しています。

年-月-日 時:分:秒
*-*-* *:*:00

例えば、今回はNGINXを毎日深夜2時に実行したいので、以下のパラメータをOnCalendarに割り当てておきます。

*-*-* 02:00:00

設定をsystemdに読み込ませて反映する

以下のコマンドを実行して作成したファイルの設定を反映します。

# systemctl daemon-reload

タイマーを起動する

以下のコマンドを実行してタイマーを起動します。

# systemctl start nginx.timer

OS起動時に自動でタイマーが起動するよう設定する

以下のコマンドを実行して作成したタイマーが自動で起動するよう設定します。

# systemctl enable nginx.timer

タイマーの状態を確認する

作成して起動したタイマーの状態を確認します。

# systemctl status nginx.timer

Active、enabledになっていることを確認します。

# systemctl status nginx.timer
● nginx.timer - nginx restart daily
     Loaded: loaded (/etc/systemd/system/nginx.timer; enabled; preset: disabled)
     Active: active (waiting) since Fri 2026-03-20 07:15:13 UTC; 7s ago
    Trigger: Sat 2026-03-21 02:00:00 UTC; 18h left
   Triggers: ● nginx-restart.service

タイマーが起動していることを確認する

タイマーが起動していることを確認します。

# systemctl list-timers | grep nginx.timer

今回こちらの環境では以下のように表示されました。

# systemctl list-timers | grep nginx
Sat 2026-03-21 02:00:00 UTC 19h left    -                           -            nginx.timer                      nginx-restart.service

タイマーが無事起動していることが確認できました。

以下のように実行すると実行が予定されているtimerがすべて表示されます。

# systemctl list-timers | grep timer

まとめ

Amazon Linux 2023ではcronがデフォルトで使えないため、今回紹介したように.serviceファイルと.timerファイルを/etc/systemd/system/に作成し、systemctl daemon-reloadとsystemctl start、systemctl enableを実行する必要があります。

cronはインストールすればAmazon Linux 2023でも使用できますが、AWSに推奨されている作業ではないため、本記事で紹介したやり方で定期的なコマンド実行を設定するのがおすすめです。