「一度だけ実行したい処理があるのに、cronに書くほどでもない」
Linuxでの運用中、指定した時刻に一回だけコマンドを実行したい場面は意外と多いものです。こうした場面で活躍するのが
at コマンドです。この記事では、
at コマンドの実践的な使い方を解説します。日時の指定書式から、ジョブの確認・削除(
atq/atrm)、アクセス制御、トラブル対処まで網羅しました。・「at 23:00」「at now + 3 hours」など日時指定の書式パターン
・atq でジョブ一覧、atrm でジョブ削除
・/etc/at.allow と /etc/at.deny によるアクセス制御
・atdサービスが動かない時の確認手順(systemctl status atd)
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
atコマンドとは(cronとの違い)
at コマンドは、指定した日時に一度だけコマンドを実行するためのツールです。cronが「毎日」「毎週月曜」のように定期的な繰り返し実行を行うのに対し、atは「今日の23:00に1回だけ」「3時間後に1回だけ」といった一回限りのジョブ実行に使います。
・at:指定日時に一度だけ実行する(ワンショット)
・cron:スケジュールに従って繰り返し実行する(定期実行)
atコマンドは、内部で
atd というデーモン(常駐プロセス)が動作しており、登録されたジョブを指定時刻になったら実行します。atコマンドの基本的な使い方
1. 指定時刻にジョブを登録する
at コマンドの基本的な書式は以下の通りです。# 書式 $ at 時刻指定 # 例:今日の23:00にジョブを登録する $ at 23:00 at> /usr/local/bin/backup.sh at>
job 1 at Mon Mar 23 23:00:00 2026
at コマンドを実行すると対話モードに入ります。実行したいコマンドを入力し、Ctrl+D(EOT)で登録を確定します。複数行のコマンドを入力すれば、それらを順番に実行してくれます。2. 日時の指定書式を覚える
at コマンドは非常に柔軟な日時指定が可能です。よく使う書式を一覧にまとめました。| 書式 | 意味 | 例 |
|---|---|---|
| HH:MM | 時刻を指定(今日、過ぎていれば翌日) | at 23:00 |
| noon | 正午(12:00) | at noon |
| midnight | 深夜0時(00:00) | at midnight |
| teatime | 16:00 | at teatime |
| tomorrow | 翌日の同時刻 | at 09:00 tomorrow |
| now + N単位 | 現在時刻からの相対指定 | at now + 30 minutes |
| MMDDYY | 月日年で日付指定 | at 23:00 032526 |
| YYYY-MM-DD | ISO形式で日付指定 | at 23:00 2026-03-25 |
| 月名 日 | 英語月名で日付指定 | at 23:00 Mar 25 |
相対指定で使える単位は
minutes、hours、days、weeks の4種類です。# 30分後に実行 $ at now + 30 minutes # 2時間後に実行 $ at now + 2 hours # 3日後の10:00に実行 $ at 10:00 + 3 days # 1週間後に実行 $ at now + 1 weeks
3. ファイルからジョブを読み込む(-f)
対話モードでコマンドを入力する代わりに、シェルスクリプトや実行したいコマンドを記述したファイルを-f オプションで指定できます。# スクリプトファイルを指定して登録する $ at -f /usr/local/bin/backup.sh 23:00 # 明日の朝9時にスクリプトを実行する $ at -f /home/admin/maintenance.sh 09:00 tomorrow
-f でスクリプトファイルを指定する方が確実です。タイプミスの心配がなく、実行内容の記録も残ります。4. 登録済みジョブを確認する(atq / at -l)
登録済みのジョブ一覧はatq コマンド(または at -l)で確認できます。$ atq 3 Mon Mar 23 23:00:00 2026 a admin 5 Tue Mar 24 09:00:00 2026 a admin # at -l でも同じ結果が得られる $ at -l
・先頭の数字:ジョブ番号(削除時に使用)
・日時:実行予定日時
・a:キュー名(atコマンドのデフォルトキュー。batchコマンドの場合は b)
・末尾の名前:ジョブを登録したユーザー名
※ root以外のユーザーは、自分が登録したジョブしか表示されません。
5. ジョブを削除する(atrm / at -d)
登録済みのジョブを削除するには、atrm コマンド(または at -d)にジョブ番号を指定します。# ジョブ番号3を削除する $ atrm 3 # at -d でも同じ $ at -d 3 # 削除後に確認する $ atq 5 Tue Mar 24 09:00:00 2026 a admin
atq で確認してから削除しましょう。間違ったジョブ番号を指定すると、別のジョブが消えてしまいます。応用・実務Tips
ジョブ完了をメールで通知する(-m)
-m オプションを付けると、ジョブの実行が完了した時点でメールで通知されます。# 完了時にメール通知を受け取る $ at -m 23:00 at> /usr/local/bin/backup.sh at>
/var/spool/mail/ユーザー名 を確認するか、mail コマンドで読めます。なお、
-m を付けなくても、ジョブが標準出力や標準エラー出力を生成した場合はメールが送信されます。出力を抑制したい場合は、リダイレクトで /dev/null に捨ててください。# 出力を抑制してメールを送らせない例 $ at 23:00 at> /usr/local/bin/backup.sh > /dev/null 2>&1 at>
atのアクセス制御(at.allow / at.deny)
atコマンドの実行を許可するユーザーは、/etc/at.allow と /etc/at.deny の2つのファイルで制御されます。評価順序は以下の通りです。
・at.allowが存在する場合:このファイルに記載されたユーザーだけがatを使える(at.denyは無視される)
・at.allowが存在せず、at.denyが存在する場合:at.denyに記載されたユーザー以外がatを使える
・どちらも存在しない場合:rootのみがatを使える(ディストリビューションにより異なる場合あり)
ファイルの書式は1行に1ユーザー名です。
# /etc/at.allow の例(このユーザーだけがatを使える) admin operator # /etc/at.deny の例(このユーザーはatを使えない) guest testuser
/etc/at.deny が空の状態で存在しています。これは「全ユーザーにatの利用を許可する」という意味になります。atとcronの使い分け
atとcronは両方ともジョブのスケジュール実行ツールですが、用途が異なります。| 項目 | at | cron |
|---|---|---|
| 実行回数 | 一度だけ | 繰り返し |
| 設定方法 | コマンドで都度登録 | crontabファイルに記述 |
| 用途 | 臨時のメンテナンス、一時的な処理 | 定時バックアップ、ログローテーション |
| 実行後 | ジョブは自動で消える | 設定が残り続ける |
使い分けの目安はシンプルです。「今回だけ」ならat、「定期的に繰り返す」ならcronです。
また、
batch コマンドという関連コマンドもあります。batchはatと同様に一度だけ実行しますが、実行タイミングはシステムの負荷(ロードアベレージ)が一定以下になった時です。重い処理をサーバーの空いている時に流したい場合に使えます。# 負荷が下がったタイミングで自動実行される $ batch at> /usr/local/bin/heavy-report.sh at>
トラブルシュート・エラー対処
「at: command not found」が出た時の対処法
at コマンドが使えない場合、atパッケージがインストールされていない可能性があります。# RHEL / CentOS / AlmaLinux / Rocky Linux の場合 $ sudo dnf install at # Ubuntu / Debian の場合 $ sudo apt install at
# atdサービスを起動する $ sudo systemctl start atd # 自動起動を有効にする $ sudo systemctl enable atd # 動作状態を確認する $ systemctl status atd
ジョブが実行されない場合の確認手順
ジョブを登録したのに指定時刻になっても実行されない場合は、以下の順番で確認してください。1. atdサービスが起動しているか確認する
$ systemctl status atd # 「active (running)」と表示されていればOK # 「inactive」の場合は sudo systemctl start atd で起動する
$ atq # ジョブが表示されない場合は、登録時にエラーがあった可能性がある
自分のユーザー名が
/etc/at.deny に含まれていないか、/etc/at.allow が存在する場合は自分が記載されているかを確認します。4. ジョブ内のコマンドパスを確認する
atで実行されるジョブは、登録時の環境変数を引き継ぎますが、PATHが異なる場合があります。コマンドはフルパスで記述するのが確実です。
# NG:PATHが通っていないと実行できない at> backup.sh # OK:フルパスで指定する at> /usr/local/bin/backup.sh
atジョブの実行ログは、システムのログに記録されます。
# journalctlでatdのログを確認する $ journalctl -u atd # または /var/log/cron を確認する(RHEL系) $ sudo cat /var/log/cron | grep atd
本記事のまとめ
at コマンドの使い方を一覧表にまとめました。| やりたいこと | コマンド |
|---|---|
| 指定時刻にジョブを登録する | at 23:00 |
| ファイルからジョブを登録する | at -f スクリプト.sh 23:00 |
| 30分後に実行する | at now + 30 minutes |
| 明日の9時に実行する | at 09:00 tomorrow |
| 登録済みジョブを確認する | atq |
| ジョブを削除する | atrm ジョブ番号 |
| 完了時にメール通知する | at -m 23:00 |
| 負荷が下がった時に実行する | batch |
| atdサービスを起動する | sudo systemctl start atd |
指定した時刻にジョブを確実に実行できていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:exitコマンドでシェルを終了する方法|終了コードの意味とスクリプト内での活用
- 前のページへ:mtools
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドA-E・プロセス管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます