Redirection
StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log
comme documenté ici :https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=
Notez que de cette façon, tout le contenu des fichiers journaux sera écrasé à chaque redémarrage du service.
Ajouter
Si vous souhaitez conserver le journal des fichiers entre les redémarrages du service et y ajouter simplement de nouvelles lignes enregistrées :
# Works only in systemd v240 and newer!
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
En cas de systemd antérieur à v240, vous pouvez utiliser :
ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'
exec
signifie que le programme shell sera remplacé par my_binary
programme après avoir configuré les redirections sans fork. Il n'y aura donc aucune différence avec l'exécution de my_binary
directement après ExecStart=
.
ExecStart=/usr/bin/nohup …
C'est faux. Retirez-le. Ce service ne s'exécute pas dans une session de connexion interactive. Il n'y a pas de terminal de contrôle, ni de chef de session, pour lui envoyer un signal de raccrochage en premier lieu.
ExecStart=… &
C'est faux. Retirez-le. Ce n'est pas un script shell. &
n'a pas de signification spéciale semblable à celle d'un shell et, dans tous les cas, ce serait la mauvaise façon de démarrer un service.
StandardOutput=/var/log/flume-ng/log1.log StandardError=/var/log/flume-ng/log2.log
Ceux-ci sont faux. Ne les utilisez pas. systemd envoie déjà la sortie standard et l'erreur du ou des processus de service dans son journal, sans aucun paramètre de ce type dans l'unité de service. Vous pouvez le voir avec
journalctl -e -u flume-ng.service
Pour se connecter au fichier sans écraser (system.d version 240+ requise) :
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
ou
StandardOutput=append:/var/log/flume-ng/log.log
StandardError=inherit