Ubuntuを使っていて、こんなことで困っていませんか?
- 毎日決まった時間にバックアップを取りたい
- 数分後に自動でコマンドを実行したい
- 定期的にシステムのメンテナンスをしたい
- 手動でやっている作業を自動化したい
実は、Ubuntuにはコマンドを時間指定で実行する機能がいくつも用意されています。
しかし、初心者の方には「cronって何?」「どのコマンドを使えばいいの?」と混乱しがちです。
この記事では、Ubuntuでコマンドを時間指定で実行する3つの方法を、それぞれの特徴と使い分け方を含めて、わかりやすく説明します。
時間指定実行の3つの方法

使い分けの基本
1回だけ実行したい場合:
at
コマンドを使用- 「明日の朝9時に1回だけ」という場合
定期的に実行したい場合:
cron
を使用- 「毎日夜8時に」「毎週月曜日に」という場合
少し後に実行したい場合:
sleep
コマンドを使用- 「今から10分後に」という場合
それぞれ詳しく見ていきましょう。
方法1:atコマンド(1回限りの実行)

atコマンドとは?
atコマンドは:
- 指定した時刻に1回だけコマンドを実行
- 「明日の朝にファイルをバックアップ」のような使い方
- 実行後は自動的に予約が削除される
インストールと確認
atがインストールされているか確認:
which at
インストールされていない場合:
sudo apt update
sudo apt install at
atデーモンの状態確認:
sudo systemctl status atd
atデーモンを起動(必要な場合):
sudo systemctl start atd
sudo systemctl enable atd
基本的な使い方
基本構文:
echo "実行したいコマンド" | at 時刻
具体例1:今日の15時30分に実行:
echo "echo 'バックアップ完了' >> ~/log.txt" | at 15:30
具体例2:明日の朝7時に実行:
echo "~/backup_script.sh" | at 7:00 tomorrow
具体例3:1時間後に実行:
echo "echo '1時間経過しました'" | at now + 1 hour
時間の指定方法
時刻の指定:
15:30
:今日の15時30分7:00 AM
:今日の朝7時9:30 PM
:今日の夜9時30分
日付の指定:
tomorrow
:明日15:30 tomorrow
:明日の15時30分2024-12-25
:具体的な日付
相対時間:
now + 30 minutes
:30分後now + 2 hours
:2時間後now + 1 day
:1日後
atコマンドの管理
予約されたジョブを確認:
atq
予約をキャンセル:
# ジョブ番号1をキャンセル
atrm 1
詳細な予約内容を確認:
# ジョブ番号1の詳細
at -c 1
方法2:cron(定期的な実行)

cronとは?
cronは:
- 指定した時間に定期的にコマンドを実行
- 「毎日」「毎週」「毎月」のような繰り返し実行
- Linuxシステムの基本機能
cronの設定方法
個人用cronの編集:
crontab -e
初回実行時のエディタ選択:
- nanoエディタ(初心者におすすめ)
- vimエディタ
- その他のエディタ
cronの書式
基本書式:
分 時 日 月 曜日 実行するコマンド
各項目の意味:
- 分:0-59
- 時:0-23
- 日:1-31
- 月:1-12
- 曜日:0-7(0と7は日曜日、1は月曜日)
cronの記述例
毎日決まった時間:
# 毎日朝7時にバックアップ
0 7 * * * /home/user/backup.sh
# 毎日夜23時30分にログ整理
30 23 * * * /home/user/cleanup.sh
毎週決まった曜日:
# 毎週月曜日の9時にレポート作成
0 9 * * 1 /home/user/report.sh
# 毎週日曜日の夜にシステム更新
0 22 * * 0 sudo apt update && sudo apt upgrade -y
毎月決まった日:
# 毎月1日の朝8時に月次処理
0 8 1 * * /home/user/monthly.sh
複数回実行:
# 毎日8時、12時、18時にチェック
0 8,12,18 * * * /home/user/check.sh
# 10分おきに監視
*/10 * * * * /home/user/monitor.sh
cronの管理
現在のcronを確認:
crontab -l
cronを削除:
crontab -r
cronのログを確認:
grep CRON /var/log/syslog
cronでよくある問題と対策
パスの問題:
# 悪い例(パスが通らない可能性)
0 7 * * * backup.sh
# 良い例(フルパスを指定)
0 7 * * * /home/user/backup.sh
環境変数の問題:
# cronの先頭で環境変数を設定
PATH=/usr/local/bin:/usr/bin:/bin
HOME=/home/user
0 7 * * * /home/user/backup.sh
権限の問題:
# スクリプトに実行権限を付与
chmod +x /home/user/backup.sh
方法3:sleepコマンド(遅延実行)

sleepコマンドとは?
sleepコマンドは:
- 指定した時間だけ待機するコマンド
- 他のコマンドと組み合わせて遅延実行
- 簡単な時間指定に便利
基本的な使い方
秒数で指定:
# 5秒待ってからファイルを作成
sleep 5 && touch ~/test.txt
分で指定:
# 10分後にメッセージを表示
sleep 600 && echo "10分経過しました"
# または
sleep 10m && echo "10分経過しました"
時間で指定:
# 2時間後に実行
sleep 2h && ~/cleanup.sh
&&演算子の使い方
成功時のみ実行:
# 前のコマンドが成功した場合のみ次を実行
sleep 300 && echo "5分後に実行"
複数のコマンドを連続実行:
# 3つのコマンドを順番に実行
sleep 60 && echo "1分経過" && echo "処理開始"
バックグラウンド実行
バックグラウンドで実行:
# 端末を閉じても実行し続ける
nohup sleep 3600 && ~/hourly_task.sh &
プロセスの確認:
# 実行中のバックグラウンドプロセスを確認
jobs
ps aux | grep sleep
実践的な使用例

バックアップの自動化
毎日のバックアップ:
# cronでの設定(毎日夜1時)
0 1 * * * tar -czf ~/backup/backup_$(date +\%Y\%m\%d).tar.gz ~/Documents
週1回のシステムバックアップ:
# 毎週日曜日の深夜2時
0 2 * * 0 sudo rsync -av /home/ /backup/home_backup/
ログの管理
古いログの削除:
# 毎日夜中に30日前のログを削除
0 0 * * * find /var/log -name "*.log" -mtime +30 -delete
システムの監視
定期的なディスク容量チェック:
# 1時間おきにディスク使用量をチェック
0 * * * * df -h > ~/disk_usage_$(date +\%Y\%m\%d_\%H).txt
トラブルシューティング
cronが動かない場合
確認すべきポイント:
- cronサービスが動いているか:
sudo systemctl status cron
- スクリプトに実行権限があるか:
chmod +x /path/to/script.sh
- フルパスで指定しているか:
# 相対パスではなくフルパスを使用 /home/user/script.sh
- ログを確認:
grep CRON /var/log/syslog tail -f /var/log/syslog
atコマンドが動かない場合
確認すべきポイント:
- atdサービスの状態:
sudo systemctl status atd
- 権限の問題:
# /etc/at.allowと/etc/at.denyを確認 ls -la /etc/at.*
sleepコマンドの注意点
端末を閉じると停止:
- 解決策:
nohup
コマンドを使用 - または
screen
やtmux
を使用
長時間の待機:
- 非常に長い時間の場合はcronを推奨
- sleepは短時間(数時間以内)に適している
セキュリティの考慮

cronでのセキュリティ
権限の最小化:
# 不要なsudo権限は避ける
# 必要最小限の権限でスクリプトを実行
ログの記録:
# 実行結果をログに記録
0 1 * * * /home/user/backup.sh >> /home/user/logs/backup.log 2>&1
ファイルの権限
スクリプトファイルの権限:
# 所有者のみ読み書き実行可能
chmod 700 /home/user/scripts/
chmod 600 /home/user/scripts/*.sh
まとめ:目的に応じて使い分けよう
Ubuntuでのコマンド時間指定実行は、目的に応じて適切な方法を選択することが重要です。
この記事のポイント
at
:1回限りの実行(明日の朝など)cron
:定期的な実行(毎日、毎週など)sleep
:少し後の実行(数分後、数時間後)
選択の基準
方法 | 適用場面 | メリット | 注意点 |
---|---|---|---|
at | 1回限りの実行 | 簡単、自動削除 | atdサービスが必要 |
cron | 定期的な実行 | 強力、柔軟 | 設定が複雑 |
sleep | 短時間の遅延 | 簡単、軽量 | 端末依存 |
実用的な活用例
日常業務の自動化:
- 毎日のバックアップ(cron)
- 週次レポートの作成(cron)
- 一時的なタスクの遅延実行(at)
システム管理:
- ログファイルの定期清理(cron)
- システム更新の自動化(cron)
- メンテナンス作業の予約(at)
自動化により、手動作業の時間を大幅に削減し、より重要な作業に集中できるようになります。まずは簡単なタスクから始めて、徐々に複雑な自動化にチャレンジしてみましょう!
よくある質問

Q: cronとatのどちらを使うべきか迷います
A: 繰り返し実行ならcron、1回限りならatです。迷った場合は、まずatで試してから、定期化が必要になったらcronに移行すると良いでしょう。
Q: 実行されているか確認する方法はありますか?
A: cronの場合は/var/log/syslog
を確認、atの場合はatq
でキューを確認できます。また、実行結果をログファイルに出力する設定をおすすめします。
Q: 複数のコマンドを同時に実行したいのですが
A: シェルスクリプトファイルにまとめるか、&&
や;
で連結できます。複雑な処理はスクリプトファイル化することをおすすめします。
コメント