【linux】cronが動いてないんだが・・と思ったら
自動化サイト運営には欠かせないCRONスケジューラーですが、どうにもクセがありうまく動かない時がありますよね。
そんな忘備録を。
CRON自体が動いてねぇんすけど・・。という事はないかと思いますので、これは省きます。
CRONのログは、/var/log/cronに書かれていて、以下のような感じかと思います。
アリマスの性で、こんな頻繁にスクリプトが動いてます(;^ω^)
(crontab -eで編集できます。正しくは、crontab –e –u ユーザー名)
ここに記載されているのは、CRONが起動したけど・・程度のレベルのものです。
つまり、エラーだったとしても、同じように報告記録されてます。
まず、ここにログとして記載されていれば、起動したプログラムの方のミスとなります。
私が良くミスる一つとして、カレントパスです。
普通にコマンドから実行する分には、うまく動くんだけど、CRONからは動かないんだよねぇ。という問題の大半は、これです。
これに似たような問題は、環境変数の違いがあります。
なので、CRONから呼び出されるものは、必ずシェルスクリプトにして、最初にカレントパスやら、環境変数などを記載しておいたほうがトラブルなくいけます。
シェルスクリプトといっても、WindowsのBAT(バッチ)と同じように、連続して書いていけばいいだけです(もち、条件式やらの構文は、まったく違いますし、実行権限付与が必要。chmod +x ファイル)
Windowsユーザーでよく間違うものの一つが、これ。
コマンドに引数を与える際に、*(ワイルドカード)を使用する際に、Linuxとは挙動が違います。
ワイルドカードのまま渡したい場合は、必ずクオートで囲っておく必要があります。
あと、良く利用しそうな例、ファイル操作も書いておきます。
ファイルを最後に追記します(動作確認やログ吐きにも利用できますね)
cat ../Item.log >>./Item.bak
echo ‘シルバーチャリオットッ’ >> ~/user/cron_debug.log
ファイルの連結を行います(Windowsとは違い出力ファイルは別名じゃないとダメ)
cat note.csv mininote.csv > itemdata_all.csv
書くまでもないけど、ファイルの削除(-f は、問答無用に削除の意味)
rm -f items_*.csv
CRONで作成した後は、パーミッションやユーザーなどがどうにかなってしまう可能性がありますので、最後には、明確に設定しておいた方がいいですね。
chmod 644 ../*.html
chown apache:apache ../*