Knoppixでcron
(以下は、http://d.hatena.ne.jp/shun_t/20070207/p1で解決しました)
訳が分からない。
Knoppixのcronで、とあるシェルスクリプトを実行しようとしているだけなのに、うまくいかない。
やりたいことは単純で、あるプログラム群を定期的にコンパイル・実行させたいだけ。
シェルスクリプトは過去に正しく動作していたものをもう一度使うので、エラーはない。
いざcronに書いて実行させようとすると・・・コンパイルがなされない。スクリプト内では、ifortでコンパイルする仕様になっている。
このシェルスクリプトを、コマンドラインで実行すると、普通にうまく動作している。
しかし、cronで実行させると、ifortコンパイルがなされない。スクリプトを非常に単純化させて、ifort関連の環境変数設定とifortでのコンパイルのみにしても、どうやらコンパイルはなされていない。
echoなどでトラップをかけてたり$PATH見たりしてみても、PATHは通ってるしechoやdateのようなコマンドは正常動作するのに、ifortのコマンド行だけまるで無視されているかのような動きをする。
コマンドライン上ではうまく動くので、原因はcronの設定?と思い、原因を調査してみたが、さっぱりピーマン。
シェルスクリプトの実行結果ログから何かわからないかなぁ、と思ってはみたものの、メールサーバのようなものがインストされていないのか、実行結果はmailされていない。さりげに、これが一番痛い。
まいったなぁ。
追記
なんとか突破口が見つかった!
ここ一週間ぐらい悩んでて諦めかけてたから、むっちゃ嬉しい!
テストスクリプトで色々試して、パーミッションやら何やら色々疑ってみたところ・・・bashで書いたらうまくいきそうなことが判明しました。コンパイル成功でバイナリ生成完了!
まず、何とか、反応のないifortコマンドそのものが、実行されているかどうかを調べたかったので、以下を実行することに行き当たりました。
ifort -opt_report_file test.log *.f
これで、test.logが保存されることで、コマンドは無視されず、実行はされていることが判明しました。
では、バイナリができないのはなぜか。パーミッションを疑ってみましたが、よく分かりませんでした。
で、今度は思いつきで、bashで書いたりしてみたところ、うまくコンパイルされることが判明。同じような内容のものをcshで書いても、バイナリは生成されない。謎。
ということで。
もともとcshで書かれていたものを、bashに翻訳する必要性が出てきた模様・・・。
bash、文法に制約が多すぎてなんか、いや・・・。IF文内のスペースの規約みたいのは何よアレ。
見通しは立ったから、そのうち作ろう。