ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

Linux - atコマンドで任意のコマンドをジョブとしてスケジューリングする

atコマンドの設定方法

基本の設定は以下の記事を参考に進めました。

uxmilk.jp

指定の時刻に任意の場所にnull.txtファイルを生成する

[vagrant@localhost ~]$ at 15:35 2017-11-29
at> touch ~/null.txt
at> <EOT>
job 5 at 2017-11-29 15:35

<EOT>というのは、End of textのことでCtrl + dで実行できます。

job 5というのが、2017-11-29 15:35 に実行されるとの出力がされました。

ジョブで実行されるコマンドを調べる

[vagrant@localhost ~]$ at -c 5
<ここで環境変数などが全て出力されるので、ここは省略>
touch ~/null.txt

touch ~/null.txtが実行されることが分かります。

ジョブの一覧を確認する

[vagrant@localhost ~]$ atq
5   2017-11-29 15:35 a vagrant

先程設定した job 5 が表示されました。

job 5が無事実行されたのか確かめる

2017-11-29 15:35まで待ちましょう。 実行したコマンドはtouch ~/null.txtなので、ホームディレクトリでlsすれば確認できそうです。

[vagrant@localhost ~]$ cd
[vagrant@localhost ~]$ pwd
/home/vagrant
[vagrant@localhost ~]$ date
Wed Nov 29 15:35:26 JST 2017
[vagrant@localhost ~]$ ls
null.txt

生成されてますね。

[vagrant@localhost ~]$ atq

ジョブ一覧からもjob 5は消えたので、実行ができたということが確認できました。

Can't open /var/run/atd.pid to signal atd. No atd running? と警告された場合

[vagrant@localhost ~]$ at 14:40 2017-11-29
at> touch ~/nul.txt
at> <EOT>
job 1 at 2017-11-29 14:40
Can't open /var/run/atd.pid to signal atd. No atd running?

atd.pid というのがatコマンドでスケジューリングしたものを実行してくれるデーモンのようで、これが存在しないので実行されないのでは?という警告みたいです。

なので、起動するように設定してあげれば解決できます。(今回はrootユーザーで設定)

[root@localhost vagrant]# /sbin/chkconfig atd on
[root@localhost vagrant]#  /etc/rc.d/init.d/atd restart
Stopping atd:                                              [FAILED]
Starting atd:                                              [  OK  ]

以上で、設定ができるようになると思います。 なお、この警告を無視しても、指定した時間にコマンドが実行されないで残るだけなので、「設定したのに、実行されない」という場合もこの手段は有効です。

参考