As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

POSIX1日1コマンド[part5]: at

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

at

at

とりあえず使ってみる

$ sudo yum install at

$ 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
$ touch dummy-file1 dummy-file2
$ ls
dummy-file1  dummy-file2

$ echo 'rm dummy-file2' > at_task

$ date
Sun Feb 25 23:56:50 UTC 2018
$ ls
at_task  dummy-file1  dummy-file2

$ at -f at_task 23:58
job 4 at Sun Feb 25 23:58:00 2018

$ date
Sun Feb 25 23:57:21 UTC 2018
$ ls
at_task  dummy-file1  dummy-file2

$ date
Sun Feb 25 23:58:03 UTC 2018
$ ls
at_task  dummy-file1
#dummy-file2が消えている

atで指定した時間にコマンドを実行した。

at を知る

ざっくりDESCRIPTION

後でコマンドを実行する。標準入力からコマンドを読み取り、後で実行されるat-jobとしてグループ化する。 at-jobは別でのシェルで実行され、制御して無いターミナルのプロセスグループとして分けられる。
環境変数、現在の作業ディレクトリ、ファイル作成マスク、およびatユーティリティが実行されたときに有効になる他のimplementation-definedの実行時間属性は、at-jobが実行されるときに、atユーティリテーは保持され使用されるものとし、実行される。

at-jobがsubmitされると、at_job_idとスケジュールされた時間は、標準エラー出力に書き込まれる。
at_job_idは英数字とピリオドからなる識別子です。
ジョブが特定のジョブを一意に識別するようにスケジュールされている場合、at_job_idはシステムによって割り当てられたものとする。

ざっくり使い方

at [-m] [-f file] [-q queuename] -t time_arg
at -r at_job_id...

ざっくりOPTION

  • -f file

    • 標準入力の代わりに、at-jobのソースとして使用するファイルのパス名を指定する。
  • -l

    • at_job_idが指定されていない場合は、起動するユーザーに対してスケジュールされたすべてのジョブを出力する。 at_job_idsが指定されている場合は、これらのジョブの情報のみを出力する。出力は標準出力に書き込まれます。
  • -m

    • at-jobが実行された後、呼び出し元のユーザーに完了のメールを送信する。at-jobによって生成された標準出力と標準エラーは、他の場所にリダイレクトされ無い限り、同様にユーザーに送られる。
  • -q
  • -r
  • -t

ざっくりOPERANDS

  • at_job_id
    • 前回atユーティティーでジョブをスケジュールしたときに出力された名前
  • timespec
    • 多かったので割愛しますが、実行する時間の設定方法が本家サイトには載っています。

ざっくりまとめ

  • cronで定期実行しているやつの一回バージョン。queをつくれそうな感じかしますね。
  • yumでインストールした。標準では入って無い
  • atd (おそらくat daemon)を起動していないと実行できない。