如何將 C 程式作為守護程式運行?

如何將 C 程式作為守護程式運行?

我有一個 C 程序,我想將其作為守護程序運行。我正在 ubuntu 14.04LTS 工作。哪一種方法是正確的?有人可以幫忙嗎?

答案1

現在,Ubuntu 給了答案。

正確的方法是在 Ubuntu 14 附帶的守護程序管理器下daemon()。諷刺的是,Ubuntu 已經推出了三個 LTS 版本事先的到版本 14 LTS——事實上是從 2006 年的 Ubuntu 6.10 開始。從那時起,它就有了這樣或那樣的守護程序管理器。

對於擁有適當服務管理的人來說,正確的答案是:不要打電話daemon()給你不要採取特殊步驟「成為守護程式」。對某些人來說,自 20 世紀 90 年代初以來,這一直是正確的答案。即使是 2006 年,這個聚會也顯得有些遲了。 ☺ 即便如此,對於 Ubuntu 來說,這絕對是過去十年的正確答案。

你所做的很簡單。您設定了一個新貴「作業」文件,告訴新貴何時以及如何呼叫您的程式。新貴叫它已經被惡魔化了,沒有控制終端,並且具有可預測且不變的初始過程狀態。你的程式沒有什麼特別的並簡單地運行,以正常方式將日誌和錯誤訊息寫入標準錯誤。您可以在作業文件中排程 upstart 如何處理寫入標準錯誤的內容。

新貴食譜詳細描述了所有這些,包括控制啟動事件和日誌處理的各個節。這裡和 AskUbuntu 上有很多關於這個主題的內容。

請做好準備,如果您稍後升級到 Ubuntu 16 LTS,世界將會發生巨大的變化。但即便如此在程式碼中不執行任何特殊操作,只需在守護程式管理器下執行仍將是正確答案。

進一步閱讀

答案2

如果您的問題是從終端運行程序,這裡有一些方法(您的程式不得要求任何使用者輸入):

  • 使用nohupnohup program > program.log 2>program.err &。然後您可以退出終端。

  • 使用 atd服務:echo "program > program.log 2>program.err" | at now
    echo "program > program.log 2>program.err" | batch

  • 作為啟動腳本的服務。

如果您的程式要求使用者輸入,那麼將無法在終端之外運行它,最好是使用screentux會話,然後將其與終端分離。

相關內容