我有一个应用程序,我们正在从使用initd转换为systemd。initd脚本曾经用于运行“ myscript.bash start”,但用户也可以运行“ myscript.bash start”。现在,当用户运行“ myscript.bash启动”时,它将运行systemctl(它本身会启动“ myscript.bash启动”)以启动服务。(我知道这太钝了-想法是保留myscript.bash内容的版本历史记录,但也允许用户以惯常的方式启动系统,切换到systemctl应该是不可见的)。
以前,如果用户运行myscript.bash,他们会在控制台上进行大量有关启动方式的更新。现在,该信息不会发送到控制台。我尝试了几件事,最有前途的似乎是将StandardOutput&StandardError设置为tty:
StandardOutput=tty
StandardError=tty
ExecStart=/bin/bash -c './myscript.bash startup &'
ExecStop=/bin/bash -c './myscript.bash shutdown'
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误:
systemd[20694]: Failed at step STDOUT spawning /bin/bash: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)
我看了一下:当作为Systemd服务运行时,如何将输出管道传输到文件?(这使我有了尝试使用StandardOutput =的想法),但是这里的目标是写入文件,而我试图将输出输出到用户控制台。
这是因为我们有一个运行systemctl的脚本,而不是由用户直接启动的脚本吗?有没有办法做到这一点?
小智 6
我想做类似的事情,而设置StandardOutput=journal+console对我有用。FWIW这是相关的systemd文档https://www.freedesktop.org/software/systemd/man/systemd.exec.html。
在您的情况下,您想查看该TTYPath选项,特别是systemd的默认值与系统上的默认值。HTH。