POSIX1日1コマンド[part8]: batch
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
batch
とりあえず使ってみる
$ sudo systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-02-25 23:50:07 UTC; 22s ago Main PID: 3314 (atd) CGroup: /system.slice/atd.service └─3314 /usr/sbin/atd -f Feb 25 23:50:07 localhost.localdomain systemd[1]: Started Job spooling tools. Feb 25 23:50:07 localhost.localdomain systemd[1]: Starting Job spooling tools...
起動していなければ、
$ sudo systemctl start atd
・使う
# 事前のディレクトリ確認 $ ls jobs # jobの内容を表示 $ cat jobs echo `date` >> sample.log # batchコマンドに渡す $ cat jobs | batch job 22 at Mon Mar 5 19:03:00 2018 # 実行されている事がわかる $ ls jobs sample.log # コマンドの実行結果がsample.logに追記されている。 cat sample.log Mon Mar 5 19:03:23 UTC 2018
・複数回キューに追加してみる
# 複数回実行 $ cat jobs | batch job 33 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 34 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 35 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 36 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 37 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 38 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 39 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 40 at Mon Mar 5 19:12:00 2018 # sample.logを確認 $ cat sample.log Mon Mar 5 19:05:53 UTC 2018
この時点では追加されてい無い事がわかる。
# キューの内容内容を確認 # bというキューにたくさんキューがたまっている $ atq 33 Mon Mar 5 19:12:00 2018 b vagrant 34 Mon Mar 5 19:12:00 2018 b vagrant 35 Mon Mar 5 19:12:00 2018 b vagrant 36 Mon Mar 5 19:12:00 2018 b vagrant 37 Mon Mar 5 19:12:00 2018 b vagrant 38 Mon Mar 5 19:12:00 2018 b vagrant 39 Mon Mar 5 19:12:00 2018 b vagrant 40 Mon Mar 5 19:12:00 2018 b vagrant # 少し時間を置く $ atq 35 Mon Mar 5 19:12:00 2018 b vagrant 36 Mon Mar 5 19:12:00 2018 b vagrant 37 Mon Mar 5 19:12:00 2018 b vagrant 38 Mon Mar 5 19:12:00 2018 b vagrant 39 Mon Mar 5 19:12:00 2018 b vagrant 40 Mon Mar 5 19:12:00 2018 b vagrant
少し時間がたってキューの中身が減っているのがわかる。
キュー内のコマンドが実行されたことを意味するので、sample.log
にも処理内容が追記されている。
$ cat sample.log Mon Mar 5 19:14:53 UTC 2018 Mon Mar 5 19:15:53 UTC 2018 Mon Mar 5 19:16:53 UTC 2018
batch を知る
ざっくり使い方
<command> | batch
ざっくりDESCRIPTION
バッチ・キュー内で実行されるコマンドをスケジュールする。
標準入力からコマンドを読み取り、バッチ・キュー内で実行するようにスケジュールします。それは以下のコマンドと同等です:
at -q b -m now
(atコマンドで 「b」というキュータスクを追加する。) ここで、キューbは特別なキュー、特にバッチ・ジョブ用です。バッチ・ジョブは、時間制約なしでバッチ・キューに提出され、バッチの呼び出しごとに異なる不特定の要因に基づいてアルゴリズムを使用してシステムによって実行されます。
実装定義のディレクトリにあるat.allow(/etc/at.allow)ファイルに名前が表示されている場合、ユーザはバッチを使用することが許可されます。そのファイルが存在しない場合、実装定義のディレクトリにあるat.deny(/etc/at.deny)ファイルをチェックして、ユーザがバッチへのアクセスを拒否されるかどうかを判断しなければなりません。いずれのファイルも存在しない場合、適切な特権を持つプロセスだけがジョブをサブミットすることが許されます。 at.denyだけが存在し、空である場合、グローバルな使用が許可されます。 at.allowファイルとat.denyファイルは、1行に1つのユーザー名で構成されます。
ざっくりOPTION
なし(batchコマンド自体にはなし)
ざっくりOPERANDS
なし(batchコマンド自体にはなし)
ざっくりまとめ
以前に使ってみた、atコマンド
の 「負荷が少ないときに処理を実行するバージョン」だそうです。
atコマンドをざっくりとしか使ってい無いため、使用感まではわかりませんでしたが、処理に時間がかかり、他の処理を優先させたい場合にbatch
を使うのは良いかもしれません。
また、
man batch
を実行すると、atコマンド
のmanが表示され、その中の一つの要素としてbatch
が存在します。