crontab 不能正常运行的原因分析方法

crontab 不能正常运行的原因分析方法

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

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

在分析之前,我们先确认一个前提: 就是操作命令本身的执行并没有问题,在shell下可正常执行,没有权限问题,更没有参数缺少的问题.

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

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

crontab中包含非法字符

比如这个命令:

echo `date +%Y%m%d`

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

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

可以在 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 命令为例,

在前者需要写成 */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就可能出现问题.

转载于:https://my.oschina.net/wolfhong/blog/759790

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值