【发布时间】:2016-11-25 21:49:30
【问题描述】:
我有一个应用程序,我们正在从使用 initd 转换为 systemd。 initd 脚本用于运行“myscript.bash start”,但用户也可以运行“myscript.bash start”。现在,当用户运行“myscript.bash start”时,它会运行 systemctl(它本身会启动“myscript.bash startup”)来启动服务。 (我知道这是迟钝的 - 想法是保留 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'
但我收到此错误:
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 的脚本,而不是由用户直接启动它吗?有没有办法做到这一点?
【问题讨论】: