Linuxのtimerまとめ:cron・systemd.timer・atコマンドの使い方と違い

Linuxで定期的に処理を実行したい場合、代表的な方法としてcron、at、systemd.timerの3つがあります。それぞれ用途や特徴が異なるため、目的に応じて適切なタイマーを選択することが重要です。

Linuxでタイマー処理を行う主な方法

ツール特徴用途設定ファイルまたはコマンド
cron時刻ベースで繰り返し実行定期的なジョブ実行(毎日・毎週など)/etc/crontab, crontab -e
at一度きりの実行予約単発ジョブ実行at, atq, atrm
systemd.timerjournalctlによるログ管理が容易。依存関係や条件実行が可能モダンなタスクスケジューリング全般.timer.service ファイル

atコマンドの使い方

一度だけタスクを予約したい場合に使います。

書式

at [オプション] 時刻

使用例

echo "/home/user/backup.sh" | at 02:00

→ 次の午前2時にバックアップスクリプトを実行。

主な操作コマンド

  • atq:ジョブ一覧を表示
  • atrm <ジョブID>:予約ジョブを削除

時刻指定の例

  • now + 10 minutes
  • midnight
  • next monday

cronによる定期実行

最も古くから使われてきたスケジューラで、システム全体やユーザ単位で設定できます。

書式

分 時 日 月 曜日 コマンド

ファイルの場所

  • 個人設定:crontab -e
  • システム全体:/etc/crontab

使用例

0 3 * * * /home/user/backup.sh

→ 毎日3時にバックアップを実行。

特殊設定キーワード

定数意味タイミング
@reboot起動時に実行OS起動直後
@daily毎日0時に実行定期日次ジョブ
@weekly毎週日曜0時週次ジョブ
@hourly毎時0分時間ごとジョブ

systemd.timerとは

systemd.timerは、systemdに統合されたモダンなスケジューラであり、cronの代替として利用されています。

RHEL9やAmazon Linux 2023などの最新ディストリビューションでは、デフォルトでsystemd.timerが導入されています。cronが別プロセスで動作するのに対し、systemd.timerはsystemd内部の仕組みとして機能します。

基本の構成

  • <name>.service: 実行する処理の定義
  • <name>.timer: 実行タイミングや間隔を定義

systemd.timerの設定例

backup.service

[Unit]
Description=Backup Script

[Service]
Type=oneshot
ExecStart=/home/user/backup.sh

backup.timer

[Unit]
Description=Run backup every hour

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

有効化手順

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers --all

systemd.timer主なオプション一覧

オプション名説明使用例
OnCalendarカレンダー形式でのスケジュールOnCalendar=daily
OnBootSec起動後に実行OnBootSec=30s
OnActiveSecタイマー起動からの経過時間後に実行OnActiveSec=5min
OnUnitActiveSec前回実行後の経過で再実行OnUnitActiveSec=1h
RandomizedDelaySec実行をランダムに遅らせるRandomizedDelaySec=10min
Persistentシャットダウン中に実行漏れしたジョブを補完Persistent=true

systemd.timer操作コマンド一覧

コマンド動作内容
systemctl start name.timerタイマーを起動
systemctl stop name.timer停止
systemctl enable name.timer起動時に自動有効化
systemctl list-timers登録されたタイマー一覧を表示
systemd-analyze verify ファイル名設定ファイルの検証

cronとsystemd.timerの比較

項目cronsystemd.timer
主な構成1ファイル(crontab).service と .timer
実行精度分単位秒単位まで設定可
ログ出力メール/syslog依存journalctlで一元管理
実行補償なしPersistentで再実行
依存関係なしUnitチェーンで管理可能
権限管理ユーザごとUnitごとに細かく設定可能
再起動後の再実行不可可能
エラーハンドリングシンプル自動リトライ・制御可能

まとめ

  • 一度だけ実行したい → at
  • 定期的に簡単なスケジュールで → cron
  • 高度で柔軟なスケジュールやログ管理が必要な場合 → systemd.timer

systemd.timerは、cronの限界を克服したモダンなタスクスケジューラーであり、システム連携・再起動対応・依存管理などの機能を備えています。Linuxの自動化を進める場合には、今後の標準としてsystemd.timerを積極的に採用するのがおすすめです。

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村