1. crond服务未启动

    crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它:

    service crond start

    如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:

    yum -y install crontabs

  2. 权限问题
    比如:脚本没有x执行权限,解决方法:

    增加执行权限,或者用bash abc.sh的方法执行(chmod 744 test.sh)

    • 关于权限

    Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访问许可权限,利用这种机制来决定某个用户通过某种方式对文件(目录)进行读、写、执行等操作。

    操作文件或目录的用户,有3种不同类型:文件所有者、群组用户、其他用户最高位表示文件所有者的权限值,中间位表示群组用户的权限值,最低位则表示其他用户的权限值,所以,chmod 777中,三个数字7分别对应上面三种用户,权限值都为7。

    文件或目录的权限又分为3种:只读、只写、可执行。

    权限 权限数值 二进制 具体作用
    r 4 00000100 read,读取。当前用户可以读取文件内容,当前用户可以浏览目录。
    w 2 00000010 write,写入。当前用户可以新增或修改文件内容,当前用户可以删除、移动目录或目录内文件。
    x 1 00000001 execute,执行。当前用户可以执行文件,当前用户可以进入目录。

    依照上面的表格,权限组合就是对应权限值求和,如下:

    7 = 4 + 2 + 1 读写运行权限
    5 = 4 + 1 读和运行权限

    4 = 4 只读权限

    因此,大家也就明白了 chmod 744 filename 命令的含义了。

  3. 路径问题

    有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,比如:
    以root身份登录shell后执行一个/data/test.sh,进入到data目录,只要执行 ./test.sh就可以了。
    但是在crontab中,就会找不到这个脚本,必须写完整:/data/test.sh

  4. 时差问题
    因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。

  5. 变量问题
    有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。
    crontab默认是不加载变量的,不要假定cron知道所需要的特殊环境,它其实并不知道。
    所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量

    • 在.sh脚本里面配置变量
      1
      2
      3
      cat test.sh  
      #!/bin/sh
      source /etc/profile
    • 在定时任务执行的时候说明变量(本人的方法),**/bin/sh** 如下:
      * 3 * * * /bin/sh /data/test.sh >> /data/test.log 2>&1