2015-10-06 65 views
24

我在將程序作爲systemd服務運行時,將STDOUT & STDERR管道傳輸到文件時遇到問題。我試着添加以下的.service文件:如何將輸出作爲系統服務運行時輸出到文件?

ExecStart=/apppath/appname > /filepath/filename 2>&1 

但是,這是行不通的。輸出結果在/ var/log/messages中,可以使用journalctl查看,但我想要一個單獨的文件。

我也試過設置StdOutput=tty,但找不到將其重定向到文件的方法。

任何幫助,將不勝感激。

回答

33

systemd.service(5)說:

ExecStart =與他們的觀點,這一服務已在執行

命令。

所以,systemd運行您/apppath/appname與ARGS >/filepath/filename2>&1

嘗試:

ExecStart=/bin/sh -c '/apppath/appname > /filepath/filename 2>&1' 
+0

謝謝。這有所幫助,但是我發現的底層問題與SELinux無聲地阻止了對我正在嘗試使用的日誌文件夾的寫入操作。 – MichaelB76

+9

有些人可能想用>>替換第一個>追加到日誌文件。 – Zyphrax

+4

注意 - 這會產生兩個進程,一個用於shell包裝,另一個用於appname。要使用'systemctl stop appname'殺死這兩個進程,請在ExecStop中使用pkill。 ExecStop =/bin/pkill -TERM -P $ MAILPID – siliconrockstar

1

嘗試:

ExecStart=/usr/bin/sh -c "/apppath/appname > /filepath/filename 2>&1" 

ExecStart需要的第一個參數是二進制(沒有例外),並且不允許管道或重定向。因此,使用ExecStart啓動一個可以完成所有所需功能的shell。

相關問題