0

我有一个具有写入错误日志功能的 TCL 脚本,但是当我将此脚本放入 crontab 时遇到如下错误:

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

代码片段是:

如果 { $logLevel >= 0 } {

puts $msg

flush stdout 

}

但是这个脚本可以手动运行成功,当我把它放在crontab中时它只会出错。

谢谢,埃姆雷

4

1 回答 1

1

当您从 cron 运行程序时,它会在不寻常的环境中运行。特别是,没有终端,环境变量不同,标准输入和标准输出通常都不可用,并且标准错误被重定向,因此如果出现任何故障,它会通过电子邮件发送给您。正如我们从您的案例中的错误消息中看到的那样,stdout 未打开(从技术上讲,它只是说它不能写入,但即便如此);puts如果没有另外说明,则默认写在那里。

基本修复?不要写到标准输出!在其他地方打开一个文件并写入该文件。或者,在您的 crontab 条目中定义一个 stdout 的重定向,以便它到达某个明确的位置(因此可以从您的 Tcl 程序内部写入)。

于 2012-09-15T16:29:39.397 回答