我正在为其编写服务文件的应用程序希望它的STDIN连接到tty,或者换句话说,它将在终端上运行。Systemd有以下设置,这些设置对我的应用程序非常有用,但是这里我使用静态配置的tty路径,它可能已经被其他应用程序使用,或者根本不存在于系统中。
StandardInput=tty-force
TTYPath=/dev/tty30如果systemd (或者我)能够找出未使用的pseudoterminal对并使用它,那就好多了。
发布于 2017-11-07 19:45:51
根据man systemd.exec的说法。您要寻找的特性不是内置在systemd中的。
作为替代,您可以编写另一个小服务,它可以找到一个免费的TTY,然后用硬编码的TTY写出一个systemd单元文件,然后在实时单元文件上调用systemctl start。
发布于 2021-12-29 21:41:50
我找到了一个根本不依赖systemd的解决方案,而是使用了常用的script命令。例如:
ExecStart=/usr/bin/script -e -c "/usr/bin/python3 -m http.server" /dev/null将使用由python3分配的伪终端执行script。记录文件被丢弃到/dev/null。
较早版本的script似乎无法正确处理信号,因此可能需要像KillSignal=SIGKILL这样的传说。(script与util-linux 2.37.2一起工作时没有这种情况。)
来自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.https://unix.stackexchange.com/questions/403049
复制相似问题