2017-06-19 92 views
0

我正在嘗試編寫一個在另一臺服務器上運行的python腳本,這樣即使我在我的PC終端上關閉了我的服務器連接,它也會繼續在該服務器上運行。當腳本保持活動狀態時,它運行無限期地監聽網站(UI)上的任何事件,在事件發生時它會適當地啓動某些泊塢窗並繼續收聽PosgreSQL事件。無限地在後臺運行Python腳本

當我嘗試使用nohup(在後臺運行腳本)時,它確實在後臺運行,但無法偵聽任何事件。有沒有人從事過類似的工作?請分享你的想法。 我正在分享我的腳本的一部分。

self.pool = await asyncpg.create_pool(user='alg_user',password='algy',database='alg',host='brain',port=6543) 
     async with self.pool.acquire() as conn: 
      def enqueue_listener(*args): 
       self.queue.put_nowait(args) 

      await conn.add_listener('task_created', enqueue_listener) 
      print("Added the listener") 
      while True: 
       print("---- Listening for new job ----") 
       conn2, pid, channel, payload = await self.queue.get() 
       x = re.sub("[^\w]", " ", payload).split() 
       print(x) 
       if x[5] == '1': 
        tsk = 'TASK_ID=%s' % str(x[1]) 
        if x[3] == '1': 
         command = "docker run --rm -it -e ALGORITHM_ID=1 -e TASK_ID=%s --network project_default project/docked_prol:1.0" % (str(x[1])) 
         subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 

        if x[3] == '8': 
         command = "docker run --rm -it -e ALGORITHM_ID=8 -e TASK_ID=%s --network project_default project/docked_pro:1.0" % (str(x[1])) 
         subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 

腳本在手動運行時運行得非常好,但只需要一些建議和實施方法。

+1

嘗試在屏幕會話內啓動嗎?你確定你在後臺運行這個進程,而不是暫停進程? – wmorrell

+0

我使用'nohup'命令來運行(https://stackoverflow.com/questions/2975624/how-to-run-a-python-script-in-the-background-even-after-i-logout- SSH)。我以此爲參考。 –

回答

0

只有在沒有提供外部輸入的情況下自動運行進程/腳本時,通過nohup在後臺運行某些內容纔會有效,因爲無法爲後臺進程提供手動輸入。 首先,嘗試檢查進程是否仍在後臺運行(ps -fe | grep processname)。

如果正在運行,請檢查'nohup.out'文件以查看進程卡住的位置。這會在您開始該過程的相同目錄中生成。這會給你一些想法,看看過程中發生了什麼。

+0

正如我在上面在我的查詢中提到的那樣,當它在後臺運行但不聽PosgreSQL的任何事件時,這也是我想要的功能。 –