本文主要介紹在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 打開進行任務編輯,只需刪除或注釋(#)定時任務即可中斷。
總結
方法一運用 Python 的 time 庫實現簡單的定時循環執行腳本,可適用變量需累加的情況。
方法二結合 cron 命令可實現復雜的定時循環循環執行腳本。
上述表述可能不到位,歡迎交流討論。



