关于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会满盘都是。

posted @ 2019-10-07 16:52  jacksonkwong  阅读(2535)  评论(0)    收藏  举报