Shammer's Philosophy

My private adversaria

設定した cron で permission denied

様々なサイトで cron の設定方法を確認しながら、自分の書いたシェルを cron として動作させるためにあれこれ試行錯誤したので、その内容をメモ。基本的な流れとしては、

  1. 実行したい処理(ShellScript)を書く
  2. 作成したShellScriptをcrontab -eで定義

なんか cron の実行状況自体は、syslog やら /var/cron やらに出力される、という情報があったが、以下のようにすることで任意の場所に自分で作成したShellScript専用(?)のログ(標準出力)を残しておくことができた。

$ crontab -l | tail -n 3
# m h  dom mon dow   command
59 23 * * * /DailyCheck/check.sh > /DailyCheck/cron.log 2>&1
$

しかし、問題なく Shell 自体は Kick されているようだが、期待通りの動作になっていなかった。そこで、cron.log を見るとあちこちに Permission Denied の文字が・・・普通にログインして、check.sh を実行した際は問題ない。いろいろ調べて、追加すべきだが追加されていなかったのがこのコマンド。

cd /DailyCheck

cron のもともとの実行ディレクトリがどこかはわからないが、実行中にファイルの I/O を伴う場合は作業ディレクトリをスクリプト内で移動しておかないとうまくいかないようだ。