清除占用的/dev/tty以启动服务

清除占用的/dev/tty以启动服务

我想在任何登录提示之前在 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]gettylogindNAutoVTs=ReserveVT=/etc/systemd/logind.conf

或者您可以使用更高的 TTY 号码,将 #1-#6 留给gettys,将 #7 和 #8 留给 GUI(另外还有一个用于快速用户切换)。还有 #9-#12 免费供您使用。

相关内容