0

エラー ログを書き込む機能を備えた TCL スクリプトがありますが、このスクリプトを crontab に配置すると、次のようなエラーが発生します。

error writing "stdout": bad file number
    while executing
"puts $msg"

コード部分は次のとおりです。

if { $logLevel >= 0 } {

puts $msg

flush stdout 

}

ただし、このスクリプトは手動で実行できますが、crontab に配置したときにのみエラーが発生します。

ありがとう、エムレ

4

1 に答える 1

1

cronからプログラムを実行すると、通常とは異なる環境で実行されます。特に、端末はなく、環境変数は異なり、stdinもstdoutも通常は使用できません。また、stderrはリダイレクトされるため、何かが失敗した場合に電子メールで送信されます。あなたのケースのエラーメッセージからわかるように、stdoutは開いていません(技術的には、書き込み用に開いていないことを示しているだけですが、それでもそうです)。puts特に明記されていない限り、デフォルトでそこに書き込みます。

基本的な修正?stdoutに書き込まないでください!別の場所でファイルを開き、そこに書き込みます。または、crontabエントリでstdoutのリダイレクトを定義して、明確な場所に移動できるようにします(したがって、Tclプログラム内からの書き込みに使用できます)。

于 2012-09-15T16:29:39.397 に答える