我有以下 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,它将自动为您处理此问题。