web-dev-qa-db-ja.com

Systemdサービスとして実行しているときに出力をファイルにパイプする方法は?

Systemdサービスとしてプログラムを実行するときに、STDOUTとSTDERRをファイルにパイピングするのに問題があります。 .serviceファイルに次を追加しようとしました。

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

しかし、これは機能しません。出力は最終的に/ var/log/messagesになり、journalctlを使用して表示できますが、別のファイルが必要です。

StdOutput=ttyを設定しようとしましたが、これをファイルにリダイレクトする方法が見つかりません。

任意の助けをいただければ幸いです。

32
MichaelB76

systemd.service(5) 言う:

ExecStart =

このサービスの開始時に実行される引数付きのコマンド。

したがって、systemd/apppath/appname引数付き>/filepath/filename2>&1

試してください:

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

試してください:

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

ExecStartは、最初の引数がバイナリ(例外なし)である必要があり、パイプまたはリダイレクトを許可しません。したがって、ExecStartを使用してシェルを起動し、その中で必要なすべての凝ったことを実行できます。

5
Casey