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

Jac*_*ins 3 linux boot cron gnu-screen ubuntu

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

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

命令完成执行后屏幕会话似乎已关闭,我可以将其保持打开状态以便查看输出吗?

谢谢!

Gil*_*il' 8

要在系统启动时运行命令,请@reboot在 cron 中安排它。详情请参阅man 5 crontab。这意味着您的 crontab 行应该看起来像

@reboot screen -m ...
Run Code Online (Sandbox Code Playgroud)

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

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

screen sh -c './script.sh; read'
Run Code Online (Sandbox Code Playgroud)

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