![清除占用的/dev/tty以启动服务](https://linux22.com/image/199547/%E6%B8%85%E9%99%A4%E5%8D%A0%E7%94%A8%E7%9A%84%2Fdev%2Ftty%E4%BB%A5%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1.png)
我想在任何登录提示之前在 Ubuntu 服务器上的某个 tty 上运行一个带有输出的服务。我已经成功创建了一个在 tty3 上运行 htop 的服务:
[Unit]
Description=htop on tty3
[Service]
Type=simple
ExecStart=/usr/bin/htop
ExecStop=/bin/kill -HUP ${MAINPID}
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty3
Restart=always
RestartSec=2
[Install]
WantedBy=getty.target
这基本上工作正常并且符合预期,切换到 tty3 (alt+f3) 按预期调出 htop,结束进程会立即重新启动它。即使从另一个 tty 停止和启动/重新启动服务也可以正常工作并按预期进行。
但有一个奇怪的边缘情况,这在某种程度上让我对另一项服务的努力感到沮丧。如果我停止上述服务,切换到 tty3,它会显示登录提示,切换回另一个 tty,然后再次启动该服务,htop 不会回来。我怀疑这是因为正常的登录/终端/任何东西现在已经声明/dev/tty3,所以我的服务正在等待,直到它可以声明/dev/tty3。
所以我的问题是,在常规 bash 终端已经声明它之后,如何清除特定的 tty 以便该服务或类似的服务可以重新启动?
答案1
请参阅以下内容中的“虚拟终端”段落:http://0pointer.de/blog/projects/serial-console.html
默认情况下,当您切换到虚拟终端 #1-#6 时,将根据 中的模板logind
自动启动它们的进程。自动启动的数量由两个设置控制:和。您可以通过取消注释并在 中调整这些设置来修改这些设置,使其远离默认值,或者(推荐)通过在`/etc/systemd/logind.conf.d/*.conf 中创建自定义嵌入式配置文件。getty
/lib/systemd/system/[email protected]
getty
logind
NAutoVTs=
ReserveVT=
/etc/systemd/logind.conf
或者您可以使用更高的 TTY 号码,将 #1-#6 留给getty
s,将 #7 和 #8 留给 GUI(另外还有一个用于快速用户切换)。还有 #9-#12 免费供您使用。