我正在为其编写服务文件的应用程序期望其STDIN
连接到tty
,或者换句话说,在终端上运行。Systemd
具有以下设置,可以为我的应用程序解决问题,但是这里我使用静态配置的tty
路径,该路径可能已被其他应用程序使用,或者根本不存在于系统上。
StandardInput=tty-force
TTYPath=/dev/tty30
systemd
如果(或者我)能够找出未使用的pseudoterminal
配对并使用它来代替,那就更好了。
答案1
根据man systemd.exec
。您正在寻找的功能未内置于systemd
.
systemd
作为替代方案,您可以编写另一个小型服务来查找空闲 TTY,然后使用硬编码的 TTY写出单元文件,然后systemctl start
调用即时单元文件。
答案2
我找到了一个完全不依赖 systemd 的解决方法,而是使用常用的script
命令。例如:
ExecStart=/usr/bin/script -e -c "/usr/bin/python3 -m http.server" /dev/null
python3
将使用由 分配的伪终端执行script
。转录文件将被丢弃到/dev/null
.
旧版本似乎script
无法正确处理信号,因此KillSignal=SIGKILL
可能需要类似的拼凑。 ( 2.37.2script
没有util-linux
这个也可以工作。)
从man script
:
-c, --command command
Run the command rather than an interactive shell. This makes it
easy for a script to capture the output of a program that behaves
differently when its stdout is not a tty.