crontab执行失败的几种场景

crond服务未重启

一般能使用crontab -e编辑任务的机器crond服务都开启了,但会存在某些时刻内容修改之后新增的任务不启动的问题。比较典型的场景是旧的定时任务还在执行,新的定时任务没有启动。

service crond restart

文件权限问题

脚本没有执行权限,可以使用chmod命令对指定文件增加执行权限,然后可以正常运行。

相对路径问题

crontab运行时通常以当前用户的家目录作为工作目录,比如test用户,more嗯会以/home/test/为工作目录。具体在crontab里调用一个向工作目录输出文件的脚本,可以观察到这个特点。编写时定时任务时使用绝对路径。

主机时间问题

服务器时间不正确,可能没有与正常时间同步,导致存在时差看不到执行结果。这点可以对/var/log/cron执行tail -f来观察。可能会影响一些存在超时机制的程序,需要调整时间,和正常时间保持一致。

环境变量问题

crontab执行时不识别profile的配置变量。有时候命令中含有需要提前导入的环境变量,脚本执行时可以成功,但crontab执行时并没有导入这些变量,也会造成执行失败。

通常,设置变量的三种方法:

  • 在/etc/profile文件中添加变量。(持久的,对所有用户有效。)
  • 在用户目录下的.bash_profile文件中增加变量。(持久的,对单一用户生效。)
  • export命令定义变量。(临时的,只对当前shell有效。)

在/etc/profile里面导入的变量,每次在使用shell的时候可以征程加载内容,但是crontab启动任务时并不会,也就是前两种设置的变量在crontab执行时是无效的。可以改用bash脚本的形式,在运行原定程序之前以export方式导入变量,然后再执行程序。

#!/bin/bash

export DM_HOME=/home/xxx
python /home/test/check.py
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页