問題背景:設置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會滿盤都是。