我有 Ubuntu Server 22.04。
任务:
- 在其上运行控制台应用程序,它将在屏幕上显示一些文本信息。
- 需要通过 HDMI 显示器或电视连接来查看应用程序的输出(消息),也可以通过 SSH 远程查看。
- 打开 RPI 电源后,操作系统和应用程序会自动启动。因此无需登录、按任何键等。
- 应用程序自动启动,如果挂起或退出,它会自动重新启动。
其他任务: 5. 如果可能的话,将应用程序的所有输出和错误消息保存到应用程序文件夹中的单独日志文件中,但不要保存到 systemd 的日志中。6. 限制日志文件大小。7. 需要有机会使用连接的键盘本地登录并通过 SSH 运行更新并进行一些维护等。
这就是我所取得的成就: 我猜最好的方法是使用 Systemd 服务的方法。
- 应用程序位于 /home/user/myapp
- 我创建了myapp.service:
[Unit]
Description=My App
After=network.target
[Service]
Type=simple
ExecStart=/home/user/myapp
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1
User=user
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
应用程序自动运行,无需登录即可在连接的显示器上显示信息。我可以使用连接的键盘按 Ctrl + Alt +F2 切换到新 tty,并可以登录操作系统进行维护。部分任务已完成。
这是正确的方法吗?也许有更好的方法?
当我通过 SSH 连接时,我看到 pts0,所以看不到应用程序的输出 :( 我尝试使用 screen 命令,但它只有在登录后我手动启动应用程序(myapp.service 停止)才有效。
- 创建新会话并运行应用程序:screen -S tty1 /home/user/myapp。查看本地屏幕上的输出。
- 使用 SSH 连接(手册建议使用 -t 参数。对我来说,没有它也可以工作)。
- 附加到会话:screen -x。通过 SSH 和本地屏幕查看输出。可以分离并运行命令进行维护。通过 SSH 连接后,是否有某种方法可以在服务器端自动运行 screen -x?
它可以工作,但是当我尝试使用 myapp.service 运行它时却不行:
[Unit]
Description=My App
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/screen -S tty1 /home/user/myapp
ExecStop=/usr/bin/screen -X quit
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1
User=user
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
不起作用。本地屏幕上显示错误消息“必须连接到终端”