web-dev-qa-db-fra.com

Comment diriger la sortie vers un fichier lors de l'exécution en tant que service Systemd?

J'ai du mal à diriger le STDOUT & STDERR vers un fichier lors de l'exécution d'un programme en tant que service systemd. J'ai essayé d'ajouter ce qui suit au .service fichier:

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

Mais ça ne marche pas. La sortie se termine dans/var/log/messages et est visible à l'aide de journalctl mais j'aimerais un fichier séparé.

J'ai également essayé de définir StdOutput=tty mais ne trouve pas de moyen de le rediriger vers un fichier.

Toute aide serait appréciée.

32
MichaelB76

systemd.service(5) dit:

ExecStart =

Commandes avec leurs arguments qui sont exécutées au démarrage de ce service.

Ainsi, systemd exécute votre /apppath/appname avec args >, /filepath/filename, 2>&1

Essayer:

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

Essayer:

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

ExecStart requiert que le premier argument soit un binaire (sans exception) et n'autorise pas les canaux ou la redirection. Par conséquent, utilisez ExecStart pour démarrer un shell dans lequel vous pouvez faire toutes les choses sophistiquées requises.

5
Casey