如何在 Linux 启动时创建多个屏幕会话?

如何在 Linux 启动时创建多个屏幕会话?

首先,在启动时执行命令的最佳方法是什么,cron?我可以su在 shell 脚本中使用它来在不同用户之间切换吗?如果可以,该怎么做?

如何screen在启动时创建多个独立会话?screen -A -m -d -S test ./script.sh似乎应该可以工作,但在 cron 启动的脚本中使用它不会显示启动后正在运行的任何屏幕会话。

看起来命令执行完成后屏幕会话就关闭了,我可以保持它打开以便可以看到输出吗?

谢谢!

答案1

要在系统启动时运行命令,请将其安排@reboot在 cron 中。请参阅man 5 crontab了解详情。这意味着您的 crontab 行应如下所示

@reboot screen -m ...

不要使用su这个,将命令放在应该运行该命令的用户的 crontab 中。这样,用户可以在没有 root 干预的情况下管理命令。(但是,如果您想以系统用户的身份运行命令,而不让该系统用户出于安全原因更改命令,那么像su -c /path/to/command www-datain这样的方法/etc/rc.local会更好。)

Screen 在命令完成后关闭窗口,并在最后一个窗口关闭时终止会话。如果您想在脚本完成后查看其输出,请在脚本之后运行另一个命令以等待输入。例如,要使窗口保持打开状态直到您按下Enter它:

screen sh -c './script.sh; read'

请记住,screen 仅保留有限数量的历史记录行。除非script.sh有时需要交互,否则最好将其输出重定向到文件。如果确实需要交互,您可以使用 screen 的log命令将输出发送到文件(这样,如果 screen 会话在不需要输入时终止,就不会有问题了)。

答案2

你有没有尝试过screen -AmdS test bash -i ./script.sh

我想象发生的事情是它启动了 screen,然后运行脚本,然后当脚本退出时,screen 终止。该bash -i部分告诉 screen 以交互模式启动 bash,然后让 bash 运行脚本。脚本执行完成后,bash 将继续在命令提示符处等待,并在您登录系统后保持 screen 会话打开,以便您附加到其中。

答案3

创建一个可执行所需操作的脚本。如果在用户之间切换只是为了执行单个命令,那么请继续使用su -c。否则,创建一个单独的脚本并调用该脚本。

然后,为了让命令在启动时运行,请将运行脚本的命令放入/etc/rc.d/rc.local

相关内容