如何使用 systemd 将服务内容的日志输出到文件中

如何使用 systemd 将服务内容的日志输出到文件中

嗯,我有一个配置为系统控制。这是配置文件:

[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) 和ExecStartPre可以ExecStopPost将消息'starting service'或写入'stopping service'文件/var/log/node/myapp.log。使用上述配置,不起作用,它只会将'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

但是,可以这样做系统控制

答案1

我遇到了类似的问题。正如解释的那样这里,事实证明您无法直接在ExecStartPre、、ExecStartExecStopPost命令内重定向输出 - systemd 会将>或解释>>为参数。解决方案是使用执行命令sh -c

date我在尝试在 systemd 脚本中使用该命令时还遇到了另一个问题:%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'

相关内容