標籤:pen 環境 lan https and ref bubuko titan 9.png
本文主要介紹在linux環境下,定時迴圈執行python指令碼的兩種方法。
方法一: nohup
vim time.py
1 import time 2 while(True): 3 #time.sleep(1) 4 with open(‘time.log‘, ‘a+‘) as logfile: 5 logfile.write(‘Hello, World!\n‘) 6 time.sleep(1) 7 #break
在終端運行如下命令
nohup python time.py &
功能:實現了每秒將 "Hello, World!" 字串,寫入目前的目錄下的 time.log 檔案中。
原理:利用 python 的無限迴圈 while(True) ,並使用 time.sleep() 方法設定相應的秒數時停,最後通過 nohup 和 & 命令將指令碼掛在後台不掛斷的運行。
nohup command &:在後台運行 command,原程式的標準輸出和錯誤重新導向到目前的目錄下的 nohup.out 檔案中。如果目前的目錄的 nohup.out 檔案不可寫,輸出重新導向到 $HOME/nohup.out 檔案中。
查看:通過 tail -f time.log 在當前終端追蹤顯示 time.log 檔案,可用 Ctrl+c 中斷顯示。
中斷:通過 jobs 命令查看當前後台中啟動並執行任務,再使用 fg %n 將第n項掛到前台,最後用 Ctrl+c 中斷任務。
或者通過 ps aux | grep python 命令查看 python 進程,找到掛起的指令碼的 PID ,再使用 kill -9 PID 中斷掛起的指令碼。
拓展:nohup和&後台運行,進程查看及終止、Linux的nohup命令的用法
方法二: cron
vim time.py
1 with open(‘/home/titanxp/test/time.log‘, ‘a+‘) as logfile: 2 logfile.write(‘Hello, World!\n‘)
在終端中使用 crontab -e 命令建立如下任務
*/1 * * * * /usr/bin/python /home/titanxp/test/time.py
功能:實現了每分鐘將 "Hello, World!" 字串,寫入指定目錄下的 time.log 檔案中。
原理:通過 crontab -e 命令建立週期性任務。要注意的是,指令碼中和指令碼路徑需要寫全路徑。
crontab 格式:minute hour day-of-month month-of-year day-of-week commands
查看:通過 tail -f /var/log/cron.log 命令查看 cron 日誌,可看到任務是否在執行。
中斷:通過 crontab -e 開啟進行任務編輯,只需刪除或注釋(#)定時任務即可中斷。
拓展:crontab命令、Linux定時執行指令碼
總結
方法一運用 Python 的 time 庫實現簡單的定時迴圈執行指令碼,可適用變數需累加的情況。
方法二結合 cron 命令可實現複雜的定時迴圈迴圈執行指令碼。
上述表述可能不到位,歡迎交流討論。
Linux定時迴圈執行python指令碼