知ってたかい?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.
要約
- AL2023では
cronieはデフォルトで含まれていない - オプションで
cronieをインストール可能だが、systemd timersへの移行を推奨 - 将来のバージョンでは、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に慣れておこうと思います。
Discussion