systemd タイマー入門:cron ジョブに代わるモダンな選択肢

systemd タイマーとは?

systemd タイマー は、systemd サービスユニットをスケジュールしてトリガーするために設計された、従来の cron ジョブに代わるモダンで強力な仕組みです。従来の cron システムと比べて柔軟性、ログ記録、依存関係の処理に優れており、Linux 上の自動化をシンプルにします。

cron の代わりに systemd タイマーを使う理由

systemd タイマーには cron に対するいくつかの利点があり、Linux 環境でのタスク自動化に最適な選択肢となっています。

  • 統合管理:他の systemd ユニットと一緒にタイマーを管理できます(開始、停止、有効化、無効化)。
  • ログ記録の改善: journalctl を使った詳細なログ記録とステータス監視。
  • 柔軟なスケジューリング:カレンダーベースの構文と単調(相対)タイマーの両方に対応しています。
  • 未実行イベントの処理:再起動後に見逃したイベントを自動的に追いつきます。

クイック例:毎日深夜にスクリプトを実行する

毎日深夜にスクリプトを実行する systemd タイマーを作成する手順を、ステップバイステップで紹介します。

1. サービスユニットを作成する

サービスユニットは、実行するアクションを定義します。この場合はスクリプトの実行です。

ファイルを作成します /etc/systemd/system/daily-script.service:

[Unit]
Description=Run my daily script

[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh

2. タイマーユニットを作成する

タイマーユニットは、サービスをいつ実行するかをスケジュールします。

ファイルを作成します /etc/systemd/system/daily-script.timer:

[Unit]
Description=Run my daily script every day at midnight

[Timer]
OnCalendar=*-*-* 00:00:00
# The format is: YYYY-MM-DD HH:MM:SS
# The above line schedules the task to run once per day at midnight.

Persistent=true

[Install]
WantedBy=timers.target

3. タイマーを有効化して開始する

次のコマンドを実行して、systemd を再読み込みし、タイマーを有効化してすぐに開始します。

sudo systemctl daemon-reload
sudo systemctl enable --now daily-script.timer

ステータスとログの確認方法

タイマーを設定したら、次のコマンドでステータスとログを監視できます。

  • アクティブなタイマーを確認する:
systemctl list-timers
  • タイマーの詳細を表示する:
systemctl status daily-script.timer
  • スクリプト実行のログを確認する:
journalctl -u daily-script.service

参考資料

  1. systemd 公式ドキュメント:
    https://www.freedesktop.org/software/systemd/man/systemd.timer.html
    構文、オプション、例を詳しく解説した、systemd タイマーの公式ドキュメントです。
  2. systemd タイマーに関する Arch Wiki:
    https://wiki.archlinux.org/title/Systemd/Timers
    実践的な例とトラブルシューティングのヒントを掲載した、コミュニティ主導のガイドです。
  3. systemd タイマーに関する Red Hat ドキュメント:
    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd#sect-Managing_Timers
    エンタープライズ用途向けの systemd タイマーについて詳しく解説しています。
  4. Ubuntu コミュニティヘルプ Wiki:
    https://help.ubuntu.com/community/systemd
    このページでは systemd の概要を説明し、タイマーに関する情報も掲載しています。

まとめ

systemd タイマーは、Linux 上のタスク自動化のための堅牢でモダンなソリューションです。cron ジョブと比べて信頼性、制御性、systemd との統合に優れています。シンプルなサービスユニットとタイマーユニットを作成するだけで、バックアップ、同期、クリーンアップジョブなどのタスクを自動化できます。個人のサーバーを管理している場合でも、エンタープライズインフラを管理している場合でも、systemd タイマーは効率的な Linux 自動化に欠かせないツールです。

コメントを残す