2010-12-17 18 views
3

我有一個命令行的python應用程序,它是一個服務 - 即它等待連接並在被問到時執行一些操作,比如webserver。有python-daemon庫從終端分離的所有問題時,分叉等,但我想走得更遠一點 - 有程序執行以下操作:python unix服務庫

  1. 知道這是否已經運行不是(通過檢查PID文件)
  2. 當用'start'選項調用時,它應該啓動守護程序(如果它未運行),或者告訴現有PID的PID並在運行時退出。
  3. 當用'stop'選項調用時,它應該終止正在運行的實例(如果存在),並清除PID文件。
  4. 當用'restart'選項調用時,它應該'停止',然後'開始'
  5. 當用'status'選項調用時,它應該顯示正在運行的實例的PID或沒有運行的任何東西。

如果這看起來像標準的Unix服務 - 這正是我想要的。有沒有一個實現這種模式的Python庫?

+1

也許寫一個正常的服務器和「守護進程」,它的東西,如supervisord? http://supervisord.org/ – 2010-12-17 00:35:42

+0

@Peteris我想過,但它看起來像一個矯枉過正的東西 - 我需要一些非常簡單的... – StasM 2010-12-17 01:02:08

+0

要求(1..5)似乎太簡單了,不需要一個庫POSIX函數已經在PHP([kill](http://www.php.net/manual/es/function.posix-kill.php),exit,read,write,getpid,[pcntl_signal](http:// us3 .php.net/manual/es/function.pcntl-signal.php))。讓服務監聽信號TERM並調用exit()。有第二個腳本來處理2. start =>啓動服務(shell,exec,fork等)。將getpid()中的PID保存到文件中。 3.殺死($ Pid_of_service)。 4.停止+停止; 5.打開,從文件中讀取pid。所以一個包裝器腳本,而不是庫,應該沒問題。 – frayser 2010-12-17 01:04:07

回答