关于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会满盘都是。
                    
                
                
            
        
浙公网安备 33010602011771号