我有以下cron作业:
*/5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txt
它创build以下文件:
david@ubuntu:/var/www/log$ ls -l -rw-r--r-- 1 root root 540 2011-05-30 17:10 log.txt?
为什么会创build一个尾随的问号? 我怎样才能阻止呢?
(我正在login控制台,看到没有编辑器的结果,所以我知道“?”在那里。)
这是唯一一个尾随“?”的文件 所以我知道它不是一个编辑器问题。 我什至不使用任何编辑器,我只是查看控制台CRT屏幕。
运行此命令将提供更多信息:
$ crontab -l | cat -tve
我相当有信心在输出结尾会看到额外的字符,如下所示:
*/5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txtM-U$
美元符号只是信号的结束(-e选项给猫)。 .txt和$任何内容都是额外的垃圾,可能是由于其他答案中列出的原因。
解决这个问题的最简单方法是将$EDITOR设置为一个简单的编辑器并重新编辑crontab。 例如:
$ EDITOR=/usr/bin/pico crontab -e
然后删除行尾的多余字符。
您的编辑器使用CRLF作为EOL而不是LF,并且该字符被视为文件名的一部分。 确保你的编辑器使用正确的行结束符。
ls的手册页显示,如果命令在terminal内运行,控制字符将显示为“?” 字符而不是实际的控制字符。 在这种情况下,控制字符可能是您的编辑器留下的错误的换行符,而不是标准的UNIX \n字符。
你需要configuration你的文本编辑器来使用UNIX行尾(LF),而不是使用CRLF,或者使用'visudo'命令行编辑器来改变你的cronjobs,这将自动处理这个。