【linux】cronが動いてないんだが・・と思ったら

サーバ構築cron,crontab,linux,windows,動かない

sc20111224214830

自動化サイト運営には欠かせないCRONスケジューラーですが、どうにもクセがありうまく動かない時がありますよね。

そんな忘備録を。


CRON自体が動いてねぇんすけど・・。という事はないかと思いますので、これは省きます。

CRONのログは、/var/log/cronに書かれていて、以下のような感じかと思います。

sc20111224215222

アリマスの性で、こんな頻繁にスクリプトが動いてます(;^ω^)

(crontab -eで編集できます。正しくは、crontab –e –u ユーザー名)

ここに記載されているのは、CRONが起動したけど・・程度のレベルのものです。

つまり、エラーだったとしても、同じように報告記録されてます。

まず、ここにログとして記載されていれば、起動したプログラムの方のミスとなります。

私が良くミスる一つとして、カレントパスです。

普通にコマンドから実行する分には、うまく動くんだけど、CRONからは動かないんだよねぇ。という問題の大半は、これです。

これに似たような問題は、環境変数の違いがあります。

なので、CRONから呼び出されるものは、必ずシェルスクリプトにして、最初にカレントパスやら、環境変数などを記載しておいたほうがトラブルなくいけます。

シェルスクリプトといっても、WindowsのBAT(バッチ)と同じように、連続して書いていけばいいだけです(もち、条件式やらの構文は、まったく違いますし、実行権限付与が必要。chmod +x ファイル)

sc20111224220250

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 ../*

サーバ構築cron,crontab,linux,windows,動かない

Posted by nabe