はじめに

こんにちは!今回はatコマンドについて解説します。

atは、指定した時間にコマンドやスクリプトを自動実行するコマンドです。「あの時間に必ずこれを実行したい」という時に超便利。cronは定期実行ですが、atは一度だけの実行に向いているんですよ。

バックアップやデータ処理、報告書の生成など、スケジュール実行したい場面でよく使います。

atコマンドとは

atは、指定した日時に一度だけコマンドを実行する外部コマンドです。“at a specific time"の略ですね。

cronと異なり、atは定期実行ではなく、特定の時刻に一度だけタスクを実行します。サーバーの定期メンテナンス、一度だけの大量データ処理、夜間にリポートを生成するなど、単発のスケジュール実行に最適です。

基本構文

1
at [オプション] [時刻指定]

実際には対話形式でコマンドを入力します。通常は以下のように使います:

1
echo "command" | at [時刻指定]

または対話形式で:

1
2
3
at [時刻指定]
# プロンプトでコマンド入力
# Ctrl+Dで終了

主なオプション

オプション 説明
-l スケジュール済みのジョブ一覧表示(atqと同じ)
-d ジョブを削除(atrm と同じ)
-f ファイルからコマンドを読み込む
-m コマンド実行後、メールで通知
-q キュー指定(a-zの優先度)
-v 実行予定時刻を詳細表示

使用例

例1: 5分後にコマンドを実行

1
echo "echo 'Hello from at command' >> /tmp/test.log" | at now + 5 minutes

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 1 at Fri Jan  3 13:30:00 2026

5分後に自動的にコマンドが実行されます。ジョブID「1」が割り当てられました。

例2: 明日の午前10時に実行

1
echo "backup.sh" | at 10:00 AM tomorrow

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 2 at Sat Jan  4 10:00:00 2026

明日の10時にスクリプトが実行されます。

例3: 特定の日時を指定して実行

1
echo "report.sh" | at 2026-01-15 14:30

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 3 at Wed Jan 15 14:30:00 2026

2026年1月15日の14時30分に実行。

例4: スケジュール済みジョブの確認

1
at -l

実行結果:

1
2
3
1 Fri Jan  3 13:30:00 2026 a
2 Sat Jan  4 10:00:00 2026 a
3 Wed Jan 15 14:30:00 2026 a

現在のスケジュール済みジョブをすべて表示します。

例5: ジョブの詳細を表示

1
at -v -l

実行結果:

1
2
2026-01-03 13:30:00 (/bin/sh)
2026-01-04 10:00:00 (/bin/sh)

より詳しい情報が表示されます。

例6: ジョブを削除

1
atrm 2

実行結果:

1
job 2 removed

ジョブID「2」を削除します。atrmはatの削除専用コマンドです。

例7: ファイルのコマンドを実行

1
2
3
4
5
6
cat << 'EOF' > /tmp/backup.sh
#!/bin/bash
tar -czf /backup/data_$(date +%Y%m%d).tar.gz /var/data
EOF

at -f /tmp/backup.sh 23:00

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 4 at Fri Jan  3 23:00:00 2026

ファイルに書いたコマンドをスケジュール実行。夜中に自動バックアップ。

例8: メール通知付きで実行

1
echo "database_cleanup.sh" | at -m 2:00 AM

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 5 at Sat Jan  4 02:00:00 2026

コマンド実行後にメールで通知が送られます。

例9: 複数のコマンドを実行

1
2
3
4
5
cat << 'EOF' | at 18:00
cd /var/log
gzip access.log
mail -s "Log compressed" [email protected]
EOF

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 6 at Fri Jan  3 18:00:00 2026

複数コマンドを順序実行。ログ圧縮後にメール通知。

例10: 1時間後に実行

1
echo "systemctl restart apache2" | at now + 1 hour

実行結果:

1
2
warning: commands will be executed using /bin/sh
job 7 at Fri Jan  3 14:19:00 2026

1時間後にサービスを再起動します。

Tips・注意点

atデーモンが起動しているか確認

1
systemctl status atd

atを使う前に、atデーモン(atd)が起動していることを確認。起動していないと実行されません。

1
2
sudo systemctl start atd
sudo systemctl enable atd  # 自動起動設定

時刻指定のフォーマット

1
2
3
4
5
6
# これらはすべて有効
at 10:30 AM
at 14:30
at "Feb 1 2026"
at now + 5 minutes
at tomorrow

柔軟なフォーマットに対応しています。

cronとの使い分け

1
2
3
4
5
# at: 一度だけ実行(単発)
at 03:00 AM

# cron: 定期的に実行
0 3 * * * /path/to/script.sh  # 毎日3時

単発ならat、定期的ならcron。

実行ユーザーの確認

atで登録したジョブは、登録したユーザー権限で実行されます。

1
2
# root権限で実行したい場合
sudo at 22:00

実践的な使い方

夜中の定期バックアップをスケジュール

1
2
3
4
5
6
7
cat << 'EOF' | at 02:00 AM
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf ${BACKUP_DIR}/backup_${DATE}.tar.gz /var/www/
echo "Backup completed" | mail -s "Backup Report" [email protected]
EOF

毎日夜中にこれを実行すれば、自動バックアップが完成。メール通知で安心です。

定期レポート生成の予約

1
echo "python /opt/reports/generate_report.py" | at 08:00 AM tomorrow

明朝8時に自動的にレポートが生成されます。

サーバーのメンテナンス時刻を設定

1
2
3
4
5
6
7
cat << 'EOF' | at 23:30
echo "Starting maintenance..." > /var/log/maintenance.log
systemctl stop apache2
# メンテナンス処理
systemctl start apache2
echo "Maintenance completed" | mail -s "Server Maintenance" [email protected]
EOF

メンテナンス開始時刻を正確に指定できます。

cronではなくatで十分な場合

1
2
3
# 月次レポートを月初に実行
at 09:00 AM Feb 1 2026
# → 来月も手動で登録しなおす必要がある(これがcronより面倒)

毎月同じ日時に実行する場合はcronの方が便利。

まとめ

atコマンドのポイント:

  • 特定の時刻に一度だけコマンドを実行する
  • atデーモン(atd)が起動していることが必須
  • cronと異なり、単発のスケジュール実行に向いている
  • -l: ジョブ一覧、atrm: ジョブ削除
  • -f: ファイルからコマンド読み込み
  • -m: 実行後メール通知
  • よく使う組み合わせ: at -l, echo "command" | at 10:00

単発のタスク実行が必要な時は、ぜひatを活用してください。サーバーメンテナンスやバックアップのスケジュール実行に超便利ですよ!