crontab 不能正常运行的缘由分析方法

crontab 不能正常运行的缘由分析方法

我是作运维开发的,偶尔会有人来问我一些关于"crontab不能正常运行"的问题。python

本着“授人以鱼不如授人以渔”的观点,在这里总结一下可能发生该情况的缘由.shell

在分析以前,咱们先确认一个前提: 就是操做命令自己的执行并无问题,在shell下可正常执行,没有权限问题,更没有参数缺乏的问题.运维

简单的校订方法就是: 将crontab -l下的该命令,直接复制到shell下运行,看是否正常执行.编码

在以上的前提下,多是以下的几个缘由,致使了crontab不能正常执行.操作系统

crontab中包含非法字符

好比这个命令:code

echo `date +%Y%m%d`

这个命令,在shell下直接执行是没问题的,可是在crontab中就有问题. 缘由是crontab中不能出现非法字符%blog

解决方法也很简单,既能够将命令写在另外一个sh文件中,而后再来执行该文件;也可使用\符号进行转义.进程

能够在 man 5 crontab 中查看到该问题的说明,以下图: 非法字符的说明crontab

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

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

一种是在某个用户下(多是root,可能非root),执行crontab -e 进行编辑.

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

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

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

在前者须要写成 */1 * * * * root echo "right" >> /tmp/output_right.txt

在后者须要写成 */1 * * * * echo "right" >> /tmp/output_right.txt

crond服务未启动

这个就太好检查了, 执行service crond status 查看该服务的运行状态.

若是进程已经dead,重启一下便可 service crond start

命令的输出包含中文等unicode

这个仅仅是一个可能的缘由, 不一样系统上的表现不是绝对的. 可能跟操做系统的默认编码有关.总之避免中文的输出吧.

好比一段简单的python代码:

# -*- coding: utf-8 -*-
python u'中文'

以上代码保存为文件demo.py. 在shell中执行 python demo.py 是没问题的, 可是在crontab就可能出现问题.

相关文章
相关标签/搜索