crontab执行失败的多种原因

彩虹网

crontabLinux下执行定时任务的常见方法。

这里总结一下自己遇到的或者被问到的相关问题, 诸如"为什么crontab执行失败", "为什么crontab没有执行"。

在分析之前, 我们先确认一个前提: 操作命令本身的执行并没有问题, 在shell下可正常运行;

不存在权限问题, 更没有参数缺少的问题。

也即是说,使用crontab -l输出该命令时,直接复制到shell中是可以正常执行的,但是在crontab中事与愿违。

在以上的前提下,可能是如下的几个原因,导致了crontab不能正常执行。

crontab中包含非法字符

比如这个命令:

echo `date +%Y%m%d`

该命令在shell下直接执行是没问题的,但是在crontab中就有问题. 原因是crontab中不能出现非法字符%.

%字符如果没有跟在转义字符\之后,将会被当做换行符,第一个%字符之后的内容将会视为该行命令的标准输入。

通过 man 5 crontab 查看到该问题的说明, 如下图:

crontab执行失败的多种原因

解决方法也很简单:

/etc/crontab 与 contab -e 两种格式混淆

定时任务有两种编辑方法,一种是root用户下编辑/etc/crontab文件: vi /etc/crontab;

一种是在特定用户身份下(可能是root,可能非root),执行crontab -e 进行编辑.

前者的格式相比于后者, 多了一个表示执行命令的“用户身份”的字段.如下图:

crontab执行失败的多种原因

这很好理解, /etc/crontab 对所有用户都是同一个文件,当然需要指明是以哪个用户来执行命令了.

以 echo "right" >> /tmp/output_right.txt 命令为例:

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。