Linux - atコマンドで任意のコマンドをジョブとしてスケジューリングする
atコマンドの設定方法
基本の設定は以下の記事を参考に進めました。
指定の時刻に任意の場所に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 ]
以上で、設定ができるようになると思います。 なお、この警告を無視しても、指定した時間にコマンドが実行されないで残るだけなので、「設定したのに、実行されない」という場合もこの手段は有効です。