我每小时运行这个命令来清理文件:
# crontab -l
MAILTO=notify@localhost
0 */1 * * * find /var/www/tmp/ -name "*" -mmin +60 | /usr/bin/xargs /bin/rm -f -R
Run Code Online (Sandbox Code Playgroud)
但是每次执行 cronjob 时,都会向我的邮件帐户发送一封包含此错误消息的电子邮件:
/bin/rm: invalid option -- '^M'
Run Code Online (Sandbox Code Playgroud)
手动执行命令工作正常:
find /var/www/tmp/ -name "*" -mmin +60 | /usr/bin/xargs /bin/rm -f -R
# ok
Run Code Online (Sandbox Code Playgroud)
日志显示:
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)
Run Code Online (Sandbox Code Playgroud)
所以显然问题出在cron文件中。
问候,
the*_*ey1 15
听起来您的 crontab 文件中的行尾可能有一个回车(^M有时由非回车友好程序输出)。您可以通过以下方式确认:
cat -v /var/spool/cron/crontabs/{user}
Run Code Online (Sandbox Code Playgroud)
请务必{user}使用您的用户名替换。如果您^M在输出中看到,则文件中有回车符。可以使用类似的程序删除它们sed(请务必先备份文件):
sed -i 's/\r//' /var/spool/cron/crontabs/{user}'
Run Code Online (Sandbox Code Playgroud)
正如Monica 在 Lightness Races的评论中提到的,dos2unix也是从文本文件中删除回车的好选择。
dos2unix 的默认设置是就地覆盖文件,因此在备份文件后:
dos2unix /var/spool/cron/crontabs/{user}
Run Code Online (Sandbox Code Playgroud)
感谢 Sergiy Kolodyazhnyy 的提示,我发现所有 crontab 都以控制字符结尾。然后我清理并重新输入命令,现在它可以工作了:
crontab -l
crontab -e # enter commands here again
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |