2011-10-01 32 views
3

我一直在關注run a perl script as a daemon中的解釋。我想在perl腳本中創建pid_file。在閱讀完文檔後,我確信下面這段代碼可以做到這一點:在使用Proc :: Daemon :: Init時創建pid_file

use Proc::Daemon; 
Proc::Daemon::Init({ pid_file => "/var/run/theprocess.pid"}); 

長話短說。身份證不起作用。我也嘗試過Proc::Daemon->new()運營商,它也沒有工作。我可能會錯過什麼?

+0

請提供有關兩種情況下「沒有工作」的更多細節。沒有編譯?運行時錯誤?錯誤消息(如果是的話)是什麼?掛? etc ... – DVK

+0

沒有創建pid文件。當守護進程脫離並運行時,完美地工作。 – rmarimon

+0

STDERR有沒有錯誤? – DVK

回答

1

不知道這是很難說的任何細節,但最有可能它是兩兩件事之一:

  • 要麼pid_file不支持完整路徑。這是不可能的,但可能考慮到POD例子涉及獨立work_dir參數和路徑少pid_file值:

    my $daemon = Proc::Daemon->new(
        work_dir  => '/working/daemon/directory', 
        pid_file  => 'pid.txt', 
        exec_command => 'perl /home/my_script.pl', 
    ); 
    

    基礎上並非如此模塊中的當前代碼(如例子僅僅是不顯示的有效使用完整路徑,但這種用法很好);但它可能是舊版模塊版本中缺少的新功能。再次,不太可能。

  • 或者,您正在寫入的文件無法創建,無論是因爲目錄丟失還是由於許可問題。如果是這種情況,應該在STDERR上看起來像「*無法打開pid_file xxxx *」。就像FYI一樣,該文件以讀寫模式打開(+>)。

1

其實,問題是,它安裝PROC ::守護::初始化Debian軟件包是0.3版本,它不具有創建進程文件的功能。我最終做了這樣的事情:

use Proc::Daemon; 
use Proc::PID::File; 

Proc::Daemon::Init(); 
if (Proc::PID::File->running()) { 
    exit; 
} 
相關問題