rob*_*007 6 logging systemd systemctl journald journalctl
好吧,我有一个配置了systemctl的服务。这是配置文件:
[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
Run Code Online (Sandbox Code Playgroud)
我需要的?:
1)ExecStartPre
和ExecStopPost
可以写入消息'starting service'
或写入'stopping service'
文件/var/log/node/myapp.log
。用上面的配置,不起作用,它只输出'Starting Service' >> /var/log/node/myapp.log
and 'Stopping Service' >> /var/log/node/myapp.log
to journalctl
。(我检查过journalctl -u myapp
)
2)我需要的是,而不是应用程序的所有日志,输出到journalctl
, 可以输出到文件。例如:/var/log/node/myapp.log
。我的意思是,如果在我的应用程序中,我有一个console.log()
,这可能在那里。
使用upstart,我可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
但是,可以用systemctl做到这一点吗?
小智 4
我遇到了类似的问题。正如此处所解释的,事实证明您无法直接在 、 或 命令中重定向输出ExecStartPre
- ExecStart
systemdExecStopPost
会将>
或解释>>
为参数。解决方案是使用 执行命令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'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15875 次 |
最近记录: |