crontab无法执行脚本原因及解决方法

前言


我们通常会将一些脚本放入crontab计划任务中,来让系统定时执行一些任务。但是,有的时候会遇到任务无法达成原目标的情况。下面介绍的是关于这些问题的原因及解决方法。



问题及对应解决方法



【1】脚本的执行权限问题


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


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



【2】脚本在crontab里的路径问题


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


注意是否字符错误


查看计划任务:
crontab -l

写入计划任务:
crontab -e


<2>如无错误,查看路径是否错误


在计划任务里要使用全路径


例如:

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


<3>修改有问题的字符或路径即可



【3】计划任务的时间设置问题


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


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


计划任务的5个*号依次代表的含义:
分 时 日 月 周

minute (0 - 59)
hour (0 - 23)
day of month (1 - 31)
month (1 - 12) OR jan,feb,mar,apr …
day of week (0 - 6) (Sunday=0 or 7)

 


<2>如有问题,修改为正确的时间即可



【4】脚本的头部问题



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

在这里插入图片描述



<2>查看当前系统是否包含此解释器或路径是否与脚本头部相同

可以用whereis 查看,例如
whereis sh

在这里插入图片描述



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



【5】脚本的执行命令问题


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


例如:使用python

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


【6】环境变量的问题


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


<1>让脚本读取环境变量


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


#!/bin/bash

source /etc/profile
source ~/.bash_profile


补充


【1】crontab的环境变量


在这里插入图片描述
如果遇到crontab中脚本的执行命令无法使用的情况,也可以通过修改/etc/crontab中的PATH添加变量



【2】crontab特殊字符


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

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

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠效

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值