linux使用shell腳本定時執行python代碼


在linux上設置定時任務或者使用shell腳本都可以執行python代碼;其中定時任務的設置在命令 crontab -e 中可以查看和設置。

假設目前有一個python腳本:

import numpy as np

print('------')
aa = [[1,2,3],[4,5,6]]
print('aa is:',aa)
bb = np.array(aa)
print('bb is:',bb)
print('------')
  • 方法一:直接在定時任務中設置執行 *.py 文件,但是要先在python代碼中指定解釋器路徑,該路徑會覆蓋默認路徑。
#!/root/anaconda3/envs/my_env/bin/python3

import numpy as np

print('------')
aa = [[1,2,3],[4,5,6]]
print('aa is:',aa)
bb = np.array(aa)
print('bb is:',bb)
print('------')

上述代碼就是test.py文件,需要在第一行指定執行腳本的應用。

然后,crontab -e 中編輯定時任務,例如(每5分鍾執行一次):

*/5 * * * * /home/test_python/test.py && echo "runing succeed!" >> /home/test_python/test.log 2>&1

如果出現 permission denied 錯誤,就要先使用 chmod u+x test.py 來使得python代碼可執行。

  • 方法二:使用shell腳本進行批處理,vim test.sh文件
#!/bin/bash

vardate=$(date +%c)
cd /home/test_python
./test.py && echo "${vardate}: runing succeed!" >> /home/test_python/test.log 2>&1

然后 chmod u+x test.sh,命令行也可直接執行:

sh test.sh
或者
./test.sh

設置定時任務 crontab -e,則可以更簡單(因為很多設置或者輸入輸出都可以在 *.sh 文件中):

*/5 * * * * /home/test_python/test.sh

注意:此時的 test.py文件還是方法一中的,在第一行有寫python解釋器位置。

  • 方法三:如果在test.py文件中沒有指定第一行的python解釋器,而是直接使用 /bin/bash,則 *.sh 文件中需要用絕對路徑指定python路徑。

此時python代碼是純python文件 test_2.py:

import numpy as np

print('------')
aa = [[1,2,3],[4,5,6]]
print('aa is:',aa)
bb = np.array(aa)
print('bb is:',bb)
print('------')

那么,test_2.sh 文件就要寫:

#!/bin/bash

cd /home/test_python
/root/anaconda3/envs/my_env/bin/python3 test_2.py && echo "runing succeed!" >> /home/test_python/test_2.log 2>&1

然后賦予執行權限:chmod u+x test_2.sh

設置定時任務:

*/5 * * * * /home/test_python/test_2.sh

 

附加:

如果要命令行執行 hive 或 spark-sql 腳本(例如要設置定時任務,操作hive表),可在 *.sh 文件中使用:hive -e "insert into ...... "或者 spark-sql -e " insert into ...... "等命令。

#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM