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

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

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

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

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

我该怎么做呢?

答案1

正如 @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

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

select 1

man screen详情请参阅。

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

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

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


或者,您可以以 root 身份运行一个独立的屏幕(例如screen -d -m -c /path/to/config)(例如从上面/etc/rc.localcron如上所述),然后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

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


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

答案2

该脚本将在重新启动时启动屏幕,就像您手动创建它们一样:

#!/bin/bash -il

# To install:
#   - put this file somewhere in your home directory like ~/start-screens
#   - chmod a+x ~/start-screens
#   - run "crontab -e" and add this line:
#     @reboot /bin/bash -li ~/start-screens

start() { screen -s "/bin/bash" -dmS "$1"; screen -S "$1" -X stuff "$2\n$3\n"; }

# Now define your screens to start here:
start service1 "cd dir1" "node index.js"
start service2 "cd dir2" "node index.js"

将其放入您的主目录,然后按照有关如何将其添加到 crontab -e 的说明进行操作。

更多信息在https://unix.stackexchange.com/a/766301/598166

相关内容