关于crontab执行定时工作之python路径问题


问题背景:设置Linux的crontab时,发现执行的Python脚本后,在脚本路径下久久不能生成想要的文件,于是考虑是不是路径设置出现问题。

代码测试:

1. 在根目录/创建data目录,然后data下创建test目录:/data/test/

#shell
mkdir data
cd data/
mkdir test
cd test/

pwd
SHELL OUTPUT:/data/test

2. 在/data/test目录下创建test.py

import os 
print(os.getcwd())

3. 在/data/test下创建cron.sh

nohup python /data/test/test.py > /data/test/make.out 2>&1 &

4. 然后在shell输入crontab -e ,输入

*/1 * * * * /bin/sh /data/test/cron.sh

5. 通过cat make.out可以发现

cat make.out
SHELL OUTPUT:/root
##由于crontab下执行会当做在指定的路径下运用python,然后运行执行脚本,所以如果需要更改到想要的目录下执行,如下

6. 应该通过第3步中加入cd /data/test/ 

cd /data/test/
nohup python /data/test/test.py > /data/test/make.out 2>&1 &

7. 这样在crontab下执行,就会先执行cd语句,然后再执行python脚本,通过cat make.out发现

cat make.out
SHELL OUTPUT:/data/test/

 

ps:

同样的,如果多个python版本的情况下,在crontab执行python的目录下,对应的可能是某个版本,在其他目录下,执行的python又是另一个版本。例如(以假设为例),crontab对应的/root目录下的python3.5,但是/data/test/运行的python对应的是python3.7,所以为了避免用错版本,应该在第3步的cron.sh设置nohup语句的时候,应设置如下(这里假设python3.7对应安装在/usr/local/bin/目录下)

cd /data/test/ 
nohup /usr/local/bin/python3.7 /data/test/test.py > /data/test/make.out 2>&1 &

 

Attention:在Linux下应该需要十分注意路径问题!否则生成的cache会满盘都是。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM