🐧 Linux Crontab とシステムスケジューリング完全ガイド:cron / systemd-timer 実践チュートリアル
Linux のスケジューリング機能は、サーバー運用・バックアップ・ログ管理・メンテナンスの自動化に欠かせない要素です。 本記事では crontab、cron デーモン、systemd-timer の仕組みを体系的に解説し、実運用で使える設定例をまとめています。 毎日のバックアップ、サービスヘルスチェック、ログ削除などの自動化がやさしく実装できます。
📌 1. Cron と Crontab の概要
cron は指定した時刻にコマンドやスクリプトを実行するデーモン、crontab はその設定ファイルです。
cron:タスクを定期的に実行するバックグラウンドサービスcrontab:ユーザごとのスケジュール定義- 主な設定場所:
/etc/crontab/etc/cron.d/、/etc/cron.hourly/などcrontab -e(ユーザ専用設定)
📝 2. Crontab の基本構文(5 フィールド)
crontab は次の 5 つの項目で構成されています。
# 分 時 日 月 曜日
* * * * * コマンド
| 項目 | 値 | 説明 |
|---|---|---|
| 分 | 0–59 | 何分に実行するか |
| 時 | 0–23 | 何時に実行するか(24 時間制) |
| 日 | 1–31 | 月の何日か |
| 月 | 1–12 | 月 |
| 曜日 | 0–7 | 0/7=日曜日 |
✔ よく使う特殊記号
* すべての値
, 複数指定(例:1,3,5)
- 範囲(例:1-5)
/ ステップ(例:*/10 = 10 分おき)
📘 3. Crontab 実践例
1️⃣ 毎日 02:00 にバックアップを実行
0 2 * * * /usr/local/bin/backup.sh
2️⃣ 10 分ごとにサービスヘルスチェック
*/10 * * * * systemctl is-active nginx >> /var/log/nginx_health.log
3️⃣ 週 1 回、7 日以上前のログを削除
0 3 * * 1 find /var/log -type f -mtime +7 -delete
📌 Cron の実行ログ確認
journalctl -u cron
# または
grep CRON /var/log/syslog
🧩 4. systemd-timer:現代的で強力なスケジューラ
CentOS 7+、RHEL、Ubuntu 18+ などの modern Linux では、 systemd-timer を利用する方が推奨されます。 cron よりもログが明確で、依存関係や再実行制御が強化されており、安定性も高いのが特徴です。
🔥 5. systemd Service + Timer の作成手順
1️⃣ Service の作成
# /etc/systemd/system/cleanup.service
[Unit]
Description=Cleanup old logs
[Service]
Type=oneshot
ExecStart=/usr/local/bin/cleanup.sh
2️⃣ Timer の作成
# /etc/systemd/system/cleanup.timer
[Unit]
Description=Run cleanup job daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
3️⃣ 有効化と起動
systemctl daemon-reload
systemctl enable --now cleanup.timer
systemctl status cleanup.timer
📌 実行履歴の確認
journalctl -u cleanup.service
systemctl list-timers
⚖️ 6. Cron と systemd-timer の比較
| 項目 | Cron | systemd-timer |
|---|---|---|
| ログ | syslog のみ | journalctl で詳細取得可 |
| 安定性 | 標準レベル | 高い、依存関係制御が可能 |
| 複雑なジョブ | 管理しにくい | 容易・拡張性が高い |
| システム統合 | 低い | systemd と完全統合 |
結論:新しい環境では systemd-timer を推奨。
🔧 7. トラブルシューティング
1️⃣ Cron が実行されない
systemctl status cron
crontab -l
grep CRON /var/log/syslog
2️⃣ PATH が原因でコマンドが動かない
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
# crontab の先頭に記述する
3️⃣ Timer が起動しない
systemctl status yourjob.timer
systemctl list-timers
journalctl -u yourjob.service
📘 まとめ
Cron と systemd-timer は Linux 自動化の中心的機能です。 Cron はシンプルで軽量なタスクに適しており、systemd-timer は依存関係管理・ログ管理・安定性が高く、現代的なシステムに最適です。 長期的な運用や複雑な自動化を考える場合、systemd-timer の使用を強く推奨します。
🔗 関連記事
— WWFandy・Linux 自動化ノート
沒有留言: