crontab执行shell脚本中python语句不成功

目前有一个需求是定时执行某个 python 脚本,进行数据的统计。

具体思路为:1、先写一个shell 脚本,在脚本中写日志并执行python程序。2、通过定时任务crontab定时执行shell脚本。

1、创建了如下shell脚本surf_hor.sh,该脚本的作用是执行coll_hor.py程序,并记录日志。

#!/bin/bash
path=/root/project/program/
workName="coll_hor.py"
cd ${path}
date=$(date +%Y%m)

if [ -d "/root/project/shell/log/$date" ];then
    echo "the dir is exit"
else
    mkdir -p /root/project/shell/log/$date
fi

LogNameDATE=`date '+%Y%m%d'`
dtYMDHms=`date "+%Y-%m-%d %H:%M:%S"`

logPath="/root/project/shell/log/$date/log$LogNameDATE.log"
echo "${dtYMDHms} 执行程序 ${workName}" >> ${logPath}
python3 /root/project/program/${workName} >> ${logPath}

2、在Linux系统中设置定时任务:通过crontab -e对定时任务进行编辑,设置每小时的5分、20分、55分执行shell脚本。

5,20,55 */1 * * * /root/project/shell/surf_hor.sh > /dev/null 2>&1

3、!!!问题:通过定时任务执行的shell脚本,只能执行到记录日志,并不能够成功执行python文件,但直接在目录下./surf_hor.sh确能够成功执行python文件。

原因分析:

crontab是系统服务,出现的问题可能有两种

1、环境:正常可以执行, 但使用定时任务确无法执行,说明定时任务调起脚本并没有加载执行环境。

2、路径:在shell脚本中调用和执行python脚本时需要使用全路径,否则会执行失败。

第二种问题往往是第一种问题所引起的。

解决方法:

在脚本最前面加上一句: source ~/.bash_profile

这样运行环境就一模一样了。加上这句后,直接执行能成功的脚本放在crontab里就能执行成功啦~

shell脚本直接运行和crontab结果不一样_crontab和手动执行命令有什么不同-CSDN博客

Linux系统crontab定时运行shell脚本失败的问题及解决_LINUX_操作系统 - 编程客栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值