俺がcronでcronが俺で

http://d.hatena.ne.jp/shun_t/20070203/p1の続きでなので、本来追記にしようかと思ったのですが。
個人的になるほど、と思ったことがあったので、新規で。

で、再びなんとかなりそうななべヤカン。
何というか、今回特に引っかかったのは、あるシェルスクリプト(nanka.sh)をコマンドラインから実行した場合はうまく動作するのに、crontabに書いてcronで実行させるとうまく動作しない、実行されない場合があるということ。実は結構ありがちなのかも。
勿論、コマンドライン実行とcron実行では、シェルスクリプトを実行させる権限が明らかに違ってるから、環境変数やらなにやらを全て確認した上で実行するべき、というのは分かる。


そしてうまく動作しない場合のデバッグ方法としては、勿論シェルスクリプト内の動作しなかった部分のエラー出力を見てみたい、ということになる訳ですが。
cronって、コマンドラインから実行した場合に出る標準出力って、メールで来るじゃないですか。MAILTOで指定したりして。
今回再構築したKnoppixって、メールサーバ入ってない訳ですよ。
rootになってmailコマンド打つと、「No mail for root」とかいう返事が来て、ちょっと空しい心持ちな訳ですよ。携帯でメール確認して、何も来なかった場合の感傷にも通じましたよ。
で・・・・僕のエラーログはどこですか・・・?


ここからがその答えということで。crontabに

0 *   * * *   root   /hogehoge/nanka.sh 1 > /hogehoge/nanka1.log 2 > /hogehoge/nanka2.log

とか書いてみることで、メールサーバ立てずにエラーが見れました・・・。知らんかった・・・。
nanka.shを実行した場合の標準出力が1で、エラー出力が2ってことらしいです。nanka2.logを見れば、エラー部分が見れます。
もっと詳細に実行結果が見たい場合は、これに加えて、シェルスクリプトの冒頭に書くシェル指定で

#!/bin/bash -x

という感じに-xを付け加えておくと、かなりかなりログが詳細に取れるようです。



でまぁ・・・この結果分かった、私のミスは・・・環境変数GXX_ROOTを指定していなかったという、昔にもやったミスなんですけどね・・・。