我尝试在 TTY1 出现之前在启动时自动启动一个交互式 C++ 程序。
我创建了一个名为的文件,/etc/systemd/system/myapp.service
其内容如下:
[Unit]
Description=myapp
[Service]
Type=oneshot
ExecStart=/home/xxx/myapp.exe start
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
然后跑了
sudo systemctl enable myapp
不幸的是,它没有按预期工作。我无法与 交互myapp
,并且我不希望 TTY1 在程序结束前出现
更新:我的应用程序现在可以在 TTY 出现之前运行。
/etc/systemd/system/myapp.service
现在包含:
[Unit]
Description=myapp
After=sysinit.target
[Service]
Type=oneshot
StandardOutput=tty
RemainAfterExit=yes
ExecStart=/home/xxx/myapp.exe start
[Install]
WantedBy=multi-user.target
但我仍然无法与我的程序交互。
答案1
我能够通过StandardInput
向 systemd 服务添加 TTY 线路并禁用 TTY1 systemd 服务来与我的程序进行交互。
以下是的最终内容/etc/systemd/system/myapp.service
:
[Unit]
Description=myapp
After=sysinit.target
[Service]
Type=oneshot
StandardInput=tty
StandardOutput=tty
RemainAfterExit=yes
ExecStart=/home/xxx/myapp.exe start
[Install]
WantedBy=multi-user.target
以下是禁用 TTY1 systemd 服务的命令:
sudo systemctl disable [email protected]
现在,该程序以交互方式出现在 TTY1 上。