这里总结一下自己遇到的或者被问到的相关问题, 诸如"为什么crontab执行失败", "为什么crontab没有执行"。
在分析之前, 我们先确认一个前提: 操作命令本身的执行并没有问题, 在shell下可正常运行;
不存在权限问题, 更没有参数缺少的问题。
也即是说,使用crontab -l输出该命令时,直接复制到shell中是可以正常执行的,但是在crontab中事与愿违。
在以上的前提下,可能是如下的几个原因,导致了crontab不能正常执行。
crontab中包含非法字符
比如这个命令:
echo `date +%Y%m%d`
该命令在shell下直接执行是没问题的,但是在crontab中就有问题. 原因是crontab中不能出现非法字符%.
%字符如果没有跟在转义字符\之后,将会被当做换行符,第一个%字符之后的内容将会视为该行命令的标准输入。
通过 man 5 crontab 查看到该问题的说明, 如下图:
解决方法也很简单:
/etc/crontab 与 contab -e 两种格式混淆
定时任务有两种编辑方法,一种是root用户下编辑/etc/crontab文件: vi /etc/crontab;
一种是在特定用户身份下(可能是root,可能非root),执行crontab -e 进行编辑.
前者的格式相比于后者, 多了一个表示执行命令的“用户身份”的字段.如下图:
这很好理解, /etc/crontab 对所有用户都是同一个文件,当然需要指明是以哪个用户来执行命令了.
以 echo "right" >> /tmp/output_right.txt 命令为例:
免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。