在系统启动时设置屏幕会话

Ian*_*son 6 linux startup boot gnu-screen

我有一个树莓派,在上面运行一些服务。我需要能够 ssh 进入机器并监控这些服务。目前,我所做的是登录、运行screen,然后创建三个窗口,并在每个窗口中运行运行相关服务的脚本。其中两个实际上以 root 身份运行(一个监视网络,另一个监视连接到 pi 的某些硬件)。第三个是运行实际的服务,并在我的用户中运行。(第二个基本上是硬件与第三个对话的代理。)

无论如何,这都很有效,除了当 pi 由于某种原因(例如电源故障)重新启动时,我必须重新设置所有这些,这很乏味。

我希望系统能够screen在我的用户中运行或自动启动,创建三个窗口,两个以 root 身份运行的进程,一个在我的用户中运行,这样当我登录时,我可以连接到该屏幕会话并查看所有内容直播运行。

我该怎么做呢?

cas*_*cas 5

正如 @DavidDai 在他的评论中提到的,最好将它们作为系统服务运行(例如,通过为它们创建 systemd 服务文件或 sysvinit 启动脚本)。不过,说起来容易做起来难。

可以继续使用屏幕进行操作。您只需要为屏幕创建一个配置文件,并使用screen -c /path/to/screen/config(覆盖默认~/.screenrc配置文件)。

screen -t monitor1   0 sudo /path/to/monitor1.sh args 
screen -t monitor2   1 sudo /path/to/monitor2.sh args 
screen -t server     2 /path/to/service/script.sh
Run Code Online (Sandbox Code Playgroud)

如果您希望它以特定的活动窗口开始,您可以添加如下行:

select 1
Run Code Online (Sandbox Code Playgroud)

man screen详情请参阅。

您还需要进行配置sudo以允许您的用户以 root 身份运行monitor1.shmonitor2.sh

当您的 rpi 重新启动时,这不会自动启动。您必须screen手动登录并启动。@reboot要在您的 uid 下自动启动,您可以从crontab 条目运行它(详细信息请参阅man 5 crontab参考资料)。

您可以作为您的用户附加到此屏幕会话。


或者,您可以screen -d -m -c /path/to/config以 root 身份运行一个独立的屏幕(例如 )(例如从上面/etc/rc.local或如上所述),然后从前两个窗口中cron删除,并将其添加到最后一个:sudo

screen -t monitor1   0 /path/to/monitor1.sh args 
screen -t monitor2   1 /path/to/monitor2.sh args 
screen -t server     2 sudo -u username /path/to/service/script.sh
Run Code Online (Sandbox Code Playgroud)

每当 rpi 重新启动时,它就会自动启动。您必须是 root 才能附加到此屏幕会话。


最后,如果您的监控脚本不需要以 root 身份运行,您应该以权限较低的用户身份运行它们。也许创建一个新用户并将他们添加到一个组中,该组具有对他们需要监视的任何内容的读取权限。