将stdout / stderr发送到控制台以获取systemd服务

时间:2016-11-25 21:49:31

标签: linux systemd

我有一个应用程序,我们正在使用initd转换为systemd。 initd脚本用于运行" myscript.bash start",但用户也可以运行" myscript.bash start"。现在当用户运行" myscript.bash start"时,它运行systemctl(它本身启动" myscript.bash启动")来启动服务。 (这是迟钝的,我知道 - 这个想法是保留myscript.bash内容的版本历史,也是为了让用户以他们习惯的方式启动系统,切换到systemctl应该是不可见的)。

以前,如果用户运行了myscript.bash,他们会在控制台上获得一些关于启动方式的更新。现在该信息不会进入控制台。我尝试过几件事,最有希望的似乎是设置StandardOutput&标准错误为tty:

StandardOutput=tty
StandardError=tty
ExecStart=/bin/bash -c './myscript.bash startup &'
ExecStop=/bin/bash -c './myscript.bash shutdown'

但是我收到了这个错误:

systemd[20694]: Failed at step STDOUT spawning /bin/bash: Inappropriate ioctl for device

我已经看过这个:How to Pipe Output to a File When Running as a Systemd Service?(这给了我尝试StandardOutput =的想法),但目标是写一个文件而我试图输出到用户的控制台。

这是因为我们有一个运行systemctl的脚本,而不是由用户直接启动吗?有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

我想做类似的事情,设置TTYPath对我有用。 FWIW这是相关的系统文档https://www.freedesktop.org/software/systemd/man/systemd.exec.html

在您的情况下,您希望查看csv.writer()选项,特别是systemd的默认值与系统上的默认值。 HTH。