Linux batch コマンド
batch は、Linux システムでシステム負荷が低いときにタスクを実行するためのコマンドツールです。at コマンドファミリーの一部であり、システムがアイドル状態のときにバッチジョブを自動的に実行するように設計されています。
at コマンドと異なり、batch は具体的な実行時間を指定する必要はなく、システムが現在の負荷状況に基づいてタスクを実行するタイミングを決定します。システムの平均負荷が 0.8(設定可能)未満の場合、batch はキュー内のタスクを自動的に実行します。
batch コマンドの動作原理
batch は以下のメカニズムで動作します:
- 負荷の検出:システムは平均負荷(load average)を継続的に監視します
- タスクキュー:タスクを専用キュー(通常は "batch" キュー)に入れます
- 自動トリガー:システム負荷がしきい値を下回ったときにキュー内のタスクを実行します
- 順次実行:先入れ先出し(FIFO)の原則に従ってタスクを順番に実行します
基本構文
batch コマンドの基本的な構文は次のとおりです:
batch [选项] [时间规格]
よく使うオプション
| オプション | 説明 |
|---|---|
-f 文件 |
指定したファイルからコマンドを読み込む(標準入力ではなく) |
-m |
タスク完了後にメールをユーザーに送信 |
-q 队列 |
特定のキューを指定する(デフォルトは batch キュー) |
-v |
タスクの実行時間を表示 |
時間指定の形式
batch は時間パラメータを厳密には要求しませんが、at コマンドと同じ時間形式を受け付けることができます:
HH:MM 特定时间(24小时制) midnight 午夜(00:00) noon 中午(12:00) teatime 下午茶时间(16:00) AM/PM 上午/下午标识 now + 时间 相对时间(如 now + 2 hours)
使用例
例1:基本的な使い方
- batch コマンドを入力
- 実行するコマンドを入力します(Ctrl+D で入力を終了)
例
at> echo "This will run when system is idle" >> ~/batch_test.log
at> date >> ~/batch_test.log
at> # Ctrl+Dを押す
job 5 at Thu Mar 2 14:00:00 2023
例2:ファイルからコマンドを読み込む
タスクスクリプトファイルを作成:
例
#!/bin/bash
echo "Starting backup at $(date)" >> ~/backup.log
tar -czf ~/backup-$(date +%Y%m%d).tar.gz ~/Documents
echo "Backup completed at $(date)" >> ~/backup.log
タスクを送信:
例
job 6 at Thu Mar 2 14:05:00 2023
例3:キュー内のタスクを表示
例
5 Thu Mar 2 14:00:00 2023 a userid batch
6 Thu Mar 2 14:05:00 2023 a userid batch
例4:キュー内のタスクを削除
$ atrm 5 # 删除任务ID为5的任务
詳細設定
負荷しきい値の変更
デフォルトでは、batch はシステムの平均負荷が 0.8 未満のときにタスクを実行します。このしきい値は atd サービスの設定を変更することで調整できます:
- 設定ファイルを編集します(場所はディストリビューションによって異なる場合があります):
sudo nano /etc/atd.conf
- 次の行を変更または追加します:
OPTS="-l 1.5" # 设置负载阈值为1.5
- atd サービスを再起動します:
sudo systemctl restart atd
システムの平均負荷を確認
例
14:10:30 up 2 days, 3:15, 3 users, load average: 0.45, 0.60, 0.72
3つの数字はそれぞれ、過去1分間、5分間、15分間のシステム平均負荷を示します。
注意事項
- 権限制御:デフォルトでは、/etc/at.allow と /etc/at.deny ファイルが batch コマンドを使用できるユーザーを制御します
- 環境変数:batch タスクは現在のシェルのすべての環境変数を継承しないため、必要に応じてスクリプト内で明示的に設定する必要があります
- 出力の処理:タスクの標準出力とエラーはデフォルトでメールでユーザーに送信されます。ファイルにリダイレクトすることをお勧めします
- 長時間のタスク:batch は実行時間が長すぎるタスクには適していません。nohup や tmux の使用を検討してください
- システムサービス:atd サービスが実行されていることを確認してください(
systemctl status atd)
実際の適用例
- システムメンテナンス:オフピーク時にディスククリーンアップ、ログローテーションなどのメンテナンスタスクを実行します
- リソース集約型タスク:ビッグデータ処理、大規模プロジェクトのコンパイルなど、大量のシステムリソースを必要とするジョブ
- 定期レポート:毎日/毎週のシステム使用状況レポートを生成します
- 自動バックアップ:システムがアイドル状態のときにバックアップ操作を実行します
- バッチ処理ジョブ:キュー内の複数の類似したタスクを処理します
関連コマンドとの比較
| コマンド | 実行時間 | 適用シーン | リソース利用 |
|---|---|---|---|
at |
具体的な時間を指定 | 正確な時間に実行するタスク | システム負荷を考慮しない |
batch |
システムアイドル時 | 緊急ではないバックグラウンドタスク | アイドルリソースをスマートに活用 |
cron |
周期スケジュール | 定期的に繰り返し実行するタスク | システム負荷を考慮しない |
nohup |
即時実行 | 長時間実行するタスク | リソースを継続的に占有 |
よくある質問と回答
Q1:batch タスクの出力を確認するには?
A:デフォルトでは出力はメールで送信されます。コマンド内でファイルにリダイレクトすることもできます:
batch < output.log 2>&1 EOF
Q2:batch タスクが実行されないのはなぜ?
A:考えられる原因:
- システム負荷がしきい値を超え続けている
- atd サービスが実行されていない
- タスクが管理者によってキャンセルされた
- ユーザーに batch を使用する権限がない
Q3:batch タスクはグラフィカルインターフェースにアクセスできますか?
A:できません。batch タスクは非対話環境で実行されるため、GUI やディスプレイデバイスにアクセスできません。
Q4:batch タスクの優先度を設定するには?
A:nice コマンドを使用して優先度を調整できます:
例
nice -n 10 command
EOF
まとめ
batch コマンドは Linux システムにおける強力なバッチ処理ツールであり、次のことができます:
- システムのアイドルリソースをスマートに活用
- 低負荷時にタスクを自動実行
- バックグラウンドタスク管理を簡素化
- システムリソースの利用率を向上
batch コマンドを習得すると、システム管理者や開発者はシステムリソースをより効率的に管理でき、特に緊急ではないバックグラウンド処理タスクの実行に適しています。
その他の拡張
Linux コマンド大全