[转载]crontab无法执行脚本原因及解决方法

[原文链接]:https://blog.csdn.net/GX_1_11_real/article/details/86535942
我们通常会将一些脚本放入crontab计划任务中,来让系统定时执行一些任务。但是,有的时候会遇到任务无法达成原目标的情况。下面介绍的是关于这些问题的原因及解决方法。

脚本的执行权限问题

写好脚本后,要赋予脚本执行权限,避免权限问题

  1. 赋予脚本执行权限
    1
    chmod +x test1.sh

脚本在crontab里的路径问题

  1. 查看crontab中,你的脚本的位置是否有错误

注意是否字符错误

查看计划任务:

1
crontab -l

写入计划任务:

1
crontab -e

  1. 如无错误,查看路径是否错误
    在计划任务里要使用全路径

例如:

1
*/5  * * * * /App/test/test1.sh

  1. 修改有问题的字符或路径即可

计划任务的时间设置问题

  1. 查看计划任务的时间是否设置的有问题

如果crontab设置的时间错误,会导致无法按原计划时间进行任务

计划任务的5个*号依次代表的含义:

1
分 时 日 月 周

  1. 如有问题,修改为正确的时间即可

脚本的头部问题

  1. 查看一下你的脚本的头部,查看你为脚本设置的解释器

    1
    #!/bin/bash
  2. 查看当前系统是否包含此解释器或路径是否与脚本头部相同

可以用whereis 查看,例如

1
whereis sh

whereis

  1. 如果是脚本的解释器的路径有误,将脚本的头部的路径修改为当前系统的路径即可

脚本的执行命令问题

在Linux系统中,使用crontab执行脚本,由于crontab没有环境变量,它是找不到你使用的命令的,需要使用命令的全路径,才可使用命令

例如:使用python

1
0 1 * * *  /usr/bin/python  /App/test/test1.py

环境变量的问题

这个是最常见的问题。
crontab执行计划任务时,它并不会从用户的profile文件中读取环境变量,所以会导致命令执行失败。

  1. 让脚本读取环境变量

在你的脚本的开头中添加如下几行,也可读取其他变量文件

1
2
3
4
#!/bin/bash

source /etc/profile
source ~/.bash_profile

补充

  1. crontab的环境变量
    crontab
    如果遇到crontab中脚本的执行命令无法使用的情况,也可以通过修改/etc/crontab中的PATH添加变量

  2. crontab特殊字符
    在crontab中,%是用来表示换行的。因此,如果有使用%,需要在前方加入 \ 进行脱义。

例如 date +%F,在crontab中,要写为date +\%F
date