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
参考資料
- systemd 公式ドキュメント:
https://www.freedesktop.org/software/systemd/man/systemd.timer.html
構文、オプション、例を詳しく解説した、systemd タイマーの公式ドキュメントです。 - systemd タイマーに関する Arch Wiki:
https://wiki.archlinux.org/title/Systemd/Timers
実践的な例とトラブルシューティングのヒントを掲載した、コミュニティ主導のガイドです。 - 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 タイマーについて詳しく解説しています。 - Ubuntu コミュニティヘルプ Wiki:
https://help.ubuntu.com/community/systemd
このページでは systemd の概要を説明し、タイマーに関する情報も掲載しています。
まとめ
systemd タイマーは、Linux 上のタスク自動化のための堅牢でモダンなソリューションです。cron ジョブと比べて信頼性、制御性、systemd との統合に優れています。シンプルなサービスユニットとタイマーユニットを作成するだけで、バックアップ、同期、クリーンアップジョブなどのタスクを自動化できます。個人のサーバーを管理している場合でも、エンタープライズインフラを管理している場合でも、systemd タイマーは効率的な Linux 自動化に欠かせないツールです。