我在Debian 9上使用systemd 236(通过backports,以便使用文件:)我有以下服务文件:
[Unit]
Description=landing
[Service]
User=vagrant
Group=vagrant
WorkingDirectory=/srv/landing/app
ExecStart=/usr/bin/node app.js
StandardOutput=file:/srv/landing/logs/app/stdout
StandardError=file:/srv/landing/logs/app/stderr
Restart=on-failure
[Install]
WantedBy=multi-user.target srv-landing-app.mount
问题是stderr转到/ srv / landing / logs / app / stdout 而不是/srv/landing/logs/app/stderr.
当我使用./app.js 2> err 1> out
stderr运行我的应用程序时,stdout正确分开,所以错误不是来自应用程序。
我非常想知道那里发生了什么。
编辑:按照评论中的要求输出在ExecStart中执行ls -l /proc/$$/fd; exit 0
的shell脚本:
total 0
lr-x------ 1 vagrant vagrant 64 Jan 17 21:59 0 -> /dev/null
l-wx------ 1 vagrant vagrant 64 Jan 17 21:59 1 -> /srv/landing/logs/app/stdout
lr-x------ 1 vagrant vagrant 64 Jan 17 21:59 10 -> /home/vagrant/x.sh
l-wx------ 1 vagrant vagrant 64 Jan 17 21:59 2 -> /srv/landing/logs/app/stdout
编辑2:我尝试了一个只有StandardError的服务文件 - 没有StandardOutput - 并且在这种情况下StandardError正常工作。
(我也试过交换StandardError和StandardOutput的顺序,但这不会改变任何东西。)