我每小时运行此命令来清理文件:
# crontab -l
MAILTO=notify@localhost
0 */1 * * * find /var/www/tmp/ -name "*" -mmin +60 | /usr/bin/xargs /bin/rm -f -R
但每次执行 cronjob 时,都会向我的邮件帐户发送一封包含此错误消息的电子邮件:
/bin/rm: invalid option -- '^M'
手动执行命令可以正常工作:
find /var/www/tmp/ -name "*" -mmin +60 | /usr/bin/xargs /bin/rm -f -R
# ok
日志显示:
grep CRON /var/log/syslog
Dec 23 06:34:01 Ubuntu-1804-bionic-64-minimal CRON[29314]: (root) CMD (find /var/www/tmp/ -name "*" -mmin +60 | /usr/bin/xargs /bin/rm -f -R --^M)
因此显然问题出在 cron 文件中。
问候,
答案1
听起来你的 crontab 文件中的行尾可能有一个回车符(^M
有时由不支持回车符的程序输出)。你可以通过以下方式确认这一点:
cat -v /var/spool/cron/crontabs/{user}
请务必用{user}
您的用户名替换。如果您^M
在输出中看到,则文件中有回车符。可以使用类似sed
(请务必先备份文件):
sed -i 's/\r//' /var/spool/cron/crontabs/{user}'
正如在来自 Monica 的 Lightness Races 的评论,dos2unix也是从文本文件中删除回车符的一个不错的选择。
dos2unix 默认是就地覆盖文件,因此备份文件后:
dos2unix /var/spool/cron/crontabs/{user}
答案2
感谢 Sergiy Kolodyazhnyy 的提示,我发现所有 crontab 都以控制字符结尾。然后我清理并重新输入命令,现在它可以正常工作了:
crontab -l
crontab -e # enter commands here again