熱門分類
載入中…
目錄0%

🐧 Linux Crontab とシステムスケジューリング完全ガイド:cron / systemd-timer 実践チュートリアル

    🐧 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–70/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 の比較

    項目Cronsystemd-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 自動化ノート

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級