Cron実行のデバッグでログに出力したら結局パスが通っていなかった話

プログラムプログラミング
スポンサーリンク

Cronで何か実行してますか?私はトライしてハマりました。その時の冒険活劇です。普通の実行と違って、ログの出力から大変でした。

スポンサーリンク

Cronで実行したものの、何かエラーが起こっているみたい

プログラム

クロンなのかクーロンなのかクローンなのか、読み方はどれでもいいみたいですが、便利ですよね。デーモンプロセスにポイっと置いておいてあとは自動実行。

ですが、どうも動いてはいるみたいですが、静かに死んでいるみたい。普通に実行させるのであればprintなりおいておいて簡単にデバッグできるんですがcronだとprintおいておいても出力されない…はて、デバッグはどうしたら良いものか。

Cronでpythonログを出力させる書き方

ではprintでログを出力させればいいじゃないということで出力させます。

プログラムでprintを入れている前提ですが、cronの設定時に一つ書き足せばログファイルを出力させることができます。

* * * * * [実行コマンド]>/Users/debug.log

このような形で、実行コマンドの後に出力先のアドレスとファイル名を記入すればログファイルを作成し、print出力を保存することができます。

ちなみに不等号はそれぞれ

> :上書き
>>:追記

です。

さて、これはどうも途中までprintされていないので、実行はされているものの途中で死んでいるパターンぽい。

pythonのエラーログを出力させる

さて、どのように死んでいるかはpython側でエラー出力させることとします。try使います。

try:
main()
except Exception as e:
print str(e)

これでエラーログが出ます。さて、あらまどうやらPATHが通っていないようなエラー…

CronのPATHを追加する

これはユーザー実行時のパスとCron実行時のパスが異なることが原因のようです。どうもCron実行時は最低限のPATHしか通っていない模様。

いくつか方法はあるようですが、cronの一番上の行に貼り付けます。

PATH=/usr/local/bin:/usr/bin

これでパスも通って普通に実行できました!

まとめ

ということでcronみたいな自動実行だとロギングも大変という話でした。すぐ実行、デバッグ!ってできませんしそもそもログ出力にも一苦労です。ロギングも色々と手法があるみたいなので、勉強しよう。

コメント

タイトルとURLをコピーしました