我希望当我运行 .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
用户在启动机器时自行启动会话即可。
运行
sudo -u minecraft crontab -e
编辑用户crontab。添加
@reboot screen /home/minecraft/mc1/rtoolkit.sh
以使 cron 在系统重启时为用户启动屏幕会话。
如何处理该登录提示取决于提示本身。如果没有更多信息,这个问题将很难回答,可能应该有自己的问题。
回答评论中您的问题:
不,这不需要你以 minecraft 用户身份登录。你只是设置它,这样当系统启动时,系统本身将负责启动屏幕会话作为我的世界用户。
通过使用
sudo -u minecraft
,您正在执行命令作为minecraft 用户。因此,就像您编辑了用户的 cron 表一样,您可以稍后通过运行重新打开屏幕会话sudo -u screen -r
。你看,屏幕会话将由 minecraft 用户启动。以前你先自己启动屏幕会话,然后在屏幕会话中启动你的脚本作为我的世界用户。
现在,您只需提前一步切换到 minecraft 用户上下文。
不,这种行为并非重启所独有。无论如何,“重启”和“正常启动”之间并没有太大区别 ;)
答案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