Linux使用crontab定時任務執行python檔案小記
在centos系統中預設安裝了crontab,可以對其進行設定來進行定時任務,定時任務的最低時間點是分鐘
先來介紹一下基本使用吧
可以使用 vim /etc/crontab 開啟crontab的配置檔案,進行crontab的定時任務的配置
配置格式:
每五分鐘執行 */5 * * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每週執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
另外在執行的任務中如果有輸出,可以在任務的後面新增log日誌,將輸出或執行資訊寫入到log日誌中
新增方式:
eg: 0 * * * * root /root/main.py>>result.log 2>&1
每小時以root的身份執行一次root/main.py檔案, 並將執行過程中出現的輸出資訊或錯誤資訊列印到root/result.log檔案中
在執行過程中也可以檢視crontab的log日誌,檢視crontab的執行情況:tail -f /var/log/cron
上面說了基本的crontab的設定,在執行py檔案的時候還有一些小坑
1、首先,個人測試需要將新增到crontab執行的檔案加上可執行許可權:chmod +x xxxx.py
2、其次在py檔案的開始第一行需要新增 #!/usr/bin/env pyhton 讓檔案執行的時候明白呼叫什麼直譯器執行
3、最坑的一點就是導包錯誤,提示:ModuleNotFoundError: No module named 'xxxx'
主要是因為在crontab執行檔案的時候不知道應該從哪裡載入這些包檔案
可以先直接進入python直譯器(就是直接寫python進入)
>>> import psycopg2
>>> psycopg2.__file__
'/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py'
檢視python解釋包的位置,我這個位置是'/usr/local/lib/python3.6/site-packages/'
需要在py檔案的開始匯入這個包之前將這個檔案位置
import sys sys.path.append('/usr/local/lib/python3.6/site-packages') import psycopg2
目前遇到這些坑,大家有更好的解決方法歡迎一塊討論補充
更新-2018年10月24日(crontab沒有上面說的那麼複雜)
在使用crontab的時候可以直接使用crontab -e 進行建立任務,如果是第一次使用也許是一個空的檔案,可以將/etc/crontab 下面的例子複製一份。另外在使用的時候需要執行的檔案可以不用修改為可執行格式,只要指定執行的環境 就可以了。
例如:*/5 * * * * python /dist/BlackFullData.py --> 表示每5分鐘,使用python去執行/dist/BlackFullData.py檔案