📅

知ってたかい?Amazon Linux 2023にcronが入っていないことを。

に公開

背景

Amazon Linux 2023でcronを設定しようとしたところ、以下のエラーが表示されました。

$ crontab -l
-bash: crontab: コマンドが見つかりません

crontabコマンドが見つからない!?

実は、Amazon Linux 2023ではcronがデフォルトでインストールされていません。

Amazon Linux 2とAL2023の違い

項目 Amazon Linux 2 Amazon Linux 2023
cronのデフォルト状態 インストール済み インストールされていない
推奨スケジューリング方法 cron systemd timers

対策1: cronieをインストール(一時的な対処で、私が採用した対策)

すぐにcronを使いたい場合は、cronieパッケージをインストールします。

sudo yum install cronie -y

cronサービスの起動と有効化

インストール後、cronサービスを起動・有効化します:

# サービスの起動
sudo systemctl start crond

# 自動起動の有効化
sudo systemctl enable crond

# ステータス確認
sudo systemctl status crond

crontabの動作確認

# crontabの編集
crontab -e

# crontabの一覧表示
crontab -l

これで従来通りcronを使用できます。

対策2: systemd timersへ移行(推奨)

AWSの公式ドキュメントでは、systemd timersへの移行を強く推奨しています。

systemd timersのメリット

  • cronよりも高機能
  • ログ管理が容易(journalctlで確認可能)
  • 依存関係の管理が明確
  • タイマーの遅延実行、リトライなどの設定が可能

systemd timersの基本的な使い方

1. サービスファイルの作成

実行したいタスクを定義します:

sudo nano /etc/systemd/system/my-task.service
[Unit]
Description=My Task

[Service]
Type=oneshot
ExecStart=/usr/local/bin/my-script.sh

2. タイマーファイルの作成

実行スケジュールを定義します:

sudo nano /etc/systemd/system/my-task.timer
[Unit]
Description=Run my task every day

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

3. タイマーの有効化と起動

# タイマーの有効化
sudo systemctl enable my-task.timer

# タイマーの起動
sudo systemctl start my-task.timer

# タイマーの確認
sudo systemctl list-timers

cronとsystemd timersのスケジュール対応表

cron systemd timers 説明
@daily OnCalendar=daily 毎日実行
@hourly OnCalendar=hourly 毎時実行
@weekly OnCalendar=weekly 毎週実行
0 2 * * * OnCalendar=*-*-* 02:00:00 毎日2時に実行
*/5 * * * * OnCalendar=*:0/5 5分ごとに実行

AWS公式の見解

AWS公式ドキュメントからの重要な引用:

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.

In AL2023, 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.

It is possible that a future version of Amazon Linux, possibly the next major version, will no longer include support for classic cron jobs and complete the transition to systemd timers. We recommend that you migrate away from using cron.

要約

  1. AL2023ではcronieはデフォルトで含まれていない
  2. オプションでcronieをインストール可能だが、systemd timersへの移行を推奨
  3. 将来のバージョンでは、cronのサポートが完全に削除される可能性がある

まとめ

短期的な対処(今すぐcronが必要な場合)

# cronieのインストール
sudo yum install cronie -y

# cronサービスの起動・有効化
sudo systemctl start crond
sudo systemctl enable crond

長期的な対応(推奨)

  • systemd timersへ移行する
  • cronよりも高機能で、将来的にもサポートが継続される
  • Amazon Linuxの次期メジャーバージョンではcronが削除される可能性がある

今後はAmazon Linux 2023を使用するので、この機会にsystemd timersに慣れておこうと思います。

GitHubで編集を提案

Discussion