關於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