如何从systemd服务的内容输出日志到文件

那么,我有一个configurationsystemctl服务。 这是configuration文件:

[Unit] Description=The description of the service (: After=network.target [Service] ExecStartPre=/bin/echo 'Starting Service' >> /var/log/node/myapp.log ExecStart=/root/.nvm/versions/node/v5.0.0/bin/node ./bin/www ExecStopPost=/bin/echo 'Stopping Service' >> /var/log/node/myapp.log Restart=always #StandardOutput=/var/log/node/myapp.log #StandardError=/var/log/node/myapp.log SyslogIdentifier=myapp Environment=NODE_ENV=production WorkingDirectory=/home/user/node-apps/theapp [Install] WantedBy=multi-user.target 

我需要的?:

1) ExecStartPreExecStopPost可以将消息'starting service''stopping service'写入文件/var/log/node/myapp.log 。 使用上述configuration,不起作用,它只输出'Starting Service' >> /var/log/node/myapp.log'Stopping Service' >> /var/log/node/myapp.logjournalctl 。 (我查了journalctl -u myapp

2)我需要,而不是应用程序的所有日志,输出到journalctl ,可以输出到一个文件。 例如: /var/log/node/myapp.log 。 我的意思是,如果在我的应用程序,我有一个console.log() ,这可能在那里。

暴发户 ,我可以这样做:

 script exec start-stop-daemon --start --make-pidfile --pidfile /var/run/upstart-yourapp.pid --chdir /var/www/yourapp/--chuid user:usergroup --exec /usr/bin/node index.js >> /var/log/yourapp.upstart.log 2>&1 end script pre-start script # Date format same as (new Date()).toISOString() for consistency echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/yourapp.upstart.log end script post-stop script rm /var/run/upstart-ghost.pid echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/yourapp.upstart.log end script 

但是,可以用systemctl来做到这一点?

我遇到了类似的问题。 如上所述,事实certificate,您不能直接在ExecStartPreExecStartExecStopPost命令内redirect输出 – systemd会将>>>解释为参数。 解决方法是使用sh -c执行你的命令。

在尝试在我的systemd脚本中使用date命令时,还遇到另一个问题: %m是引用当前主机的机器ID的特殊代码。 所以为了让它输出你需要通过使用两个百分号( %% )来跳过百分号的月份。 综合起来,上面的前后脚本的systemd版本是:

 # Date format same as (new Date()).toISOString() for consistency ExecStartPre = /bin/sh -c 'echo "[`date -u +%Y-%%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/yourapp.upstart.log' ExecStopPost = /bin/sh -c 'rm /var/run/upstart-ghost.pid; echo "[`date -u +%Y-%%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/yourapp.upstart.log'