为什么我的 cron 作业会创建一个带有尾随问号的日志?

为什么我的 cron 作业会创建一个带有尾随问号的日志?

我有以下 cron 作业:

 */5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txt

它会创建以下文件:

david@ubuntu:/var/www/log$ ls -l
-rw-r--r-- 1 root root   540 2011-05-30 17:10 log.txt?

为什么会出现末尾问号?我该如何停止这种情况?

(我正在登录控制台并在没有编辑器的情况下查看结果,所以我知道“?”在那里。)

这是唯一一个以“?”结尾的文件,所以我知道这不是编辑器问题。我甚至没有使用任何编辑器,我只是在查看控制台 CRT 屏幕。

答案1

运行此命令将提供更多信息:

$ crontab -l | cat -tve

我确信您会在输出末尾看到额外的字符,如下所示:

*/5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txtM-U$

美元符号只是表示行尾(cat 的 -e 选项)。.txt和之间的任何内容$都是多余的垃圾,可能是由于其他答案中列出的原因。

解决此问题的最简单方法是将你的编辑器设置$EDITOR为简单的编辑器并重新编辑 crontab。例如:

$ EDITOR=/usr/bin/pico crontab -e

然后删除行尾的所有多余的字符。

答案2

您的编辑器使用 CRLF 作为 EOL,而不仅仅是 LF,并且该字符被视为文件名的一部分。确保您的编辑器使用正确的行尾。

答案3

手册页ofls表明,如果命令在终端内运行,控制字符将显示为“?”字符,而不是实际的控制字符。在这种情况下,控制字符可能是编辑器留下的错误换行符,而不是标准 UNIX 字符\n

您需要将文本编辑器配置为使用 UNIX 行尾符号 (LF),而不是使用 CRLF,或者使用“visudo”命令行编辑器来更改您的 cronjobs,它将自动为您处理此问题。

相关内容