自动化 sudo 和 screen 命令

自动化 sudo 和 screen 命令

我希望当我运行 .sh 脚本时能够以单独的用户身份在单独的屏幕命令会话中启动脚本。

我认为脚本中可能存在以下情况:

#I am also starting xampp here, as that is what runs the webserver on this server
sudo /opt/lampp/lampp start 
screen sudo -u minecraft /home/minecraft/mc1/rtoolkit.sh
screen sudo -u minecraft /home/minecraft/mc2/rtoolkit.sh

如您所见,此脚本中有几个“sudo”实例。Sudo 要求我输入密码,我计划让此脚本在服务器启动时自动运行。另一个问题是屏幕可能有登录提示。

更多信息:操作系统:Ubuntu server 12.04 LTS

答案1

只需让minecraft用户在启动机器时自行启动会话即可。

  1. 运行sudo -u minecraft crontab -e编辑用户crontab。

  2. 添加@reboot screen /home/minecraft/mc1/rtoolkit.sh以使 cron 在系统重启时为用户启动屏幕会话。

如何处理该登录提示取决于提示本身。如果没有更多信息,这个问题将很难回答,可能应该有自己的问题。

回答评论中您的问题:

  1. 不,这不需要你以 minecraft 用户身份登录。你只是设置它,这样当系统启动时,系统本身将负责启动屏幕会话作为我的世界用户。

    通过使用sudo -u minecraft,您正在执行命令作为minecraft 用户。因此,就像您编辑了用户的 cron 表一样,您可以稍后通过运行重新打开屏幕会话sudo -u screen -r

    你看,屏幕会话将由 minecraft 用户启动。以前你先自己启动屏幕会话,然后在屏幕会话中启动你的脚本作为我的世界用户。

    现在,您只需提前一步切换到 minecraft 用户上下文。

  2. 不,这种行为并非重启所独有。无论如何,“重启”和“正常启动”之间并没有太大区别 ;)

答案2

在启动时启动守护进程的正确方法是使用 init 脚本/etc/rc[0-6].d(在/etc/rc.d/rc[0-6].d某些系统上可以找到)。 cron 作业@reboot可以使用,但 cron 适用于执行一次然后退出的脚本,而不是用于生成守护进程。

在您的示例中,您尝试从 cron 启动 LAMPP。相反,您应该创建/etc/rc?.d指向的符号链接/etc/init.d/lampp,而后者又指向/opt/lampp/lampp,如下所示:

sudo ln -s /opt/lampp/lampp /etc/init.d/
sudo update-rc.d lampp defaults

相关内容