1. 程式人生 > >Linux使用crontab定時任務執行python檔案小記

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檔案