【Linux】なぜか、at コマンドでスケジューリングした処理が実行されない
ローカルで実行するとうまくいく at コマンドがリモートからだとどうしても上手くいかなかった件
起動しないといって、 at -l を見ると、タスク一覧からはちゃんと消えてるので、実行しようとして入るのだが、起爆しないのだ。
色々なページを見ても、全く原因が分からなかったのだけど、原因はリモートというのは直接な原因ではなかったのだ。
まず、at コマンドが時間になった時に実行失敗した場合、system 宛にメールが届くらしいので、それを見てみた。
cd: 9: can't cd to /tmp/x20200422-11331-xabr2y# Execution directory inaccessible |
at コマンド自体は、別フォルダにある、シェルスクリプトを呼んでるはずなので、なんで、/tmp フォルダに移動してエラーを吐いてるのか分からんのだが…
at コマンドを実行した後 at -c を実行してみて原因が判明
#!/bin/sh # atrun uid=1000 gid=1000 # mail system 0 umask 2 XDG_SESSION_ID=108845; export XDG_SESSION_ID |
at コマンドを実行された時のフォルダが存在しないとエラーになる
仕方ないのでこうしたところうまくいくようになった
cd /tmp
at /etc/init.d/mofmof.sh now +3minutes
|
なるほど、分からん・ω・
Windowsのショートカットでも作業フォルダ指定する位だし、*nixでコマンドを実行するってのは「どこで」とか「どんな状態で」って概念が重要なんでしょうね。
今この場で実行しうるこのコマンドを指定時刻に発火させよ、って指令で暗黙のうちに状態一式保存して実行する訳だ。
何気ない要件が裏で複雑な要素を抱え込むってままある話だけどこれもその一種かねぇ……
# フォルダなかったら適当なtmpなりホームなりで実行してくれてもいいのに。