2010-06-02 23 views
3

我正在試圖將一個perl進程的示例測試daemonize到syslog。daemonize perl進程

1)在perl腳本,它已經登陸到循環日誌文件,但我想記錄的守護進程的情況下,當事情變日誌之前不對得到創建 2)目前我做的 須藤/ usr/sbin目錄/ daemonize -u用戶-a -e /home/users/me/log/log.log/home/users/me/test

它已經在工作,但問題是日誌文件會變大並且是唯一的方法如果守護進程停止,則處理日誌文件。

所以我嘗試登錄到系統日誌,所以我做

須藤/ usr/sbin目錄/守護進程-u用戶-a -e的/ dev /標準錯誤的/ home /用戶/我/測試|日誌記錄器

寫入stderr時,將出現權限錯誤。如果我不以用戶身份運行它會記錄正常,但出於安全原因,我必須以用戶身份運行我的守護進程。

我堅持任何幫助是讚賞

我的測試 副主{ 我的$ I = 0; ($ i = 0; $ i < 10; $ i ++){ print「這是一個測試」。 $ i。 「\ n」; } }

main(@ARG);

注意我也試過2> & 1,但不工作

+3

http://stackoverflow.com/questions/766397/how-can-i-run-a-perl-script-as-a-system-daemon-in-linux - 這裏你去.. – 2013-02-16 14:35:56

+0

其他問題我懷疑你在這裏(雖然我不確定/ usr/sbin/daemonize是幹什麼的)是你將輸出管道輸出到守護進程以外的記錄器。我懷疑它可能會關閉標準輸出(守護進程時要做的標準事情),此時你已經失去了管道記錄器,記錄器就會退出。 – rra 2013-03-17 10:44:10

+0

嘗試[immortal](https://immortal.run)'immortal -l your-command' – nbari 2017-09-07 19:12:01

回答

2

你可能會做的更好使用守護::守護進程從CPAN或類似的東西。它允許你自動重定向STDOUT和STDERR。它聲稱處理你需要的所有setpgrp的東西。

我認爲如果將它與使用Sys :: Syslog(也來自CPAN)結合使用,您可以在不依賴/ usr/sbin/daemonize的情況下完成所需的任何操作,並且可以更多地控制什麼是實際發生在您的程序中。

您似乎有兩個不同的問題:

1)守護程序。 2)登錄到系統日誌。

這兩個都是直接在Perl代碼中直接解決的問題。除了守護進程::守護進程外,還有Proc ::守護進程。我對他們的相對優點沒有意見,我剛纔使用了Daemon :: Daemonize。任何一個都會讓你的程序作爲守護進程運行。

對於寫入系統日誌,使用Sys :: Sylog將爲您完成繁重的工作。這不是一個簡單的重定向,但它可以讓你發送日誌消息,而不用擔心日誌的旋轉。