簡體   English   中英

如何按計划在后台運行我的python腳本?

[英]How can I run my python script in the background on a schedule?

我有一個小的python腳本,可以創建從MySQL中提取的數據圖。 我正試圖找出一種在后台運行腳本的方法。 我嘗試過很多東西:

  1. 運行腳本的Cron作業
  2. 循環計時器
  3. 使用&命令在后台運行腳本

這些都有優點和缺點:

  1. 每半個小時運行一次以上的Cron Job似乎占用了更多的資源然后它的價值。
  2. 放入腳本的循環計時器實際上並沒有將腳本放在后台,只是讓它保持運行。
  3. Linux&命令介紹了該過程,但與真正的Linux服務不同,我無法在不殺死它的情況下重新啟動/停止它。

有人能指出我的方法來充分利用所有這些方法嗎?

為什么不嘗試將腳本變成正確的守護進程。 這個鏈接是一個很好的起點。

import os
import subprocess
import time
from daemon import runner

class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path =  '/tmp/your-pid-name.pid'
        self.pidfile_timeout = 5
    def run(self):

        try:
            while True:

                ### PUT YOUR SCRIPT HERE ###

                time.sleep(300)

        except Exception, e:
            raise

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

您可以像任何其他Linux服務一樣啟動/停止/重新啟動此腳本。

cron作業通常可能是一種很好的方法,因為shell方法需要手動干預來啟動它。

一些建議:

您可以使用鎖定文件來確保cron作業只啟動python腳本的一個實例 - 通常在將cron用於較大的作業時會出現問題,因為它會在第一個實例實際完成之前啟動第二個實例。 您可以通過檢查鎖定文件是否存在來執行此操作,然后,如果不存在,則在腳本開頭“觸摸”文件並將其作為腳本末尾的最后一個操作“rm”。 如果鎖定文件存在 - 只需退出腳本,因為已經有一個實例在運行。 (當然,如果腳本死亡,則必須在再次運行腳本之前刪除鎖定文件)。

此外,如果資源使用過多是一個問題,您可以通過賦予它低優先級(前綴例如,nice -n 19)來確保腳本不會占用太多資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM