文章 28
评论 59
浏览 10712
关于Linux的定时任务crontab执行失败(报错No such file or directory)

关于Linux的定时任务crontab执行失败(报错No such file or directory)

  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种:只读、只写、可执行。

    权限权限数值二进制具体作用
    r400000100read,读取。当前用户可以读取文件内容,当前用户可以浏览目录。
    w200000010write,写入。当前用户可以新增或修改文件内容,当前用户可以删除、移动目录或目录内文件。
    x100000001execute,执行。当前用户可以执行文件,当前用户可以进入目录。

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

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

标题:关于Linux的定时任务crontab执行失败(报错No such file or directory)
作者:JssDream
地址:https://www.hjava.cn/articles/2019/08/13/1565669241375.html

  • JssDream 回复»

    crontab字段任务时间规则,一共有六列分表表示;分、时、日、月、周、命令

    第1列分钟00~59
    第2列小时00~23(0表示子夜)
    第3列日1~31
    第4列月1~12
    第5列星期0~6(0表示星期天)
    第6列要运行的命令
    

  • JssDream @ JssDream 回复»

    chmod 777 test.sh

  • JssDream 回复»

    crontab -e 进入编辑页面
    crontab -l 查看当前的定时任务

静以修身,俭以养德