我希望每次服务器启动时运行一个 .jar 文件(我们正在使用 VPS),因此我使用 编辑了 crontab crontab -e
,然后添加了@reboot bash /home/bash/startserver.sh
。但我甚至还没有到达脚本完全起作用的地步。
这是我的脚本:
#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar
我需要使用它的原因screen
是,当我启动 bukkit.jar 时,它会进入一个控制台,我可以在其中输入该程序的更多命令(我相信你们都熟悉这个网站上的 Minecraft 及其服务器,哈哈),但我需要能够在它运行时以 root 身份执行其他命令以及其他程序的命令,甚至关闭我的 PuTTY 会话。
唯一的问题是,当运行此脚本时,它会创建一个屏幕会话,但它的 ID不是中列出的screen -ls
,因为 ID 是空白的。相反,我必须去找到 ID,然后对其/run/screen/S-root
使用典型。screen -X -S $name quit
也许这根本不可能,或者实际上有更简单的方法可以做到这一点(我希望更简单),但我不明白为什么这不起作用。如果这是可能的,那么在运行screen -S bukkit
bash 脚本时是否可以重新加入会话?(我想有多个问题,但非常感谢您的帮助!(括号))
答案1
以分离模式启动屏幕,并让它在其中运行命令:
screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'
您可能需要创建一个专用脚本bukkit.sh
:
#!/bin/bash -e
cd ~/server
java -jar bukkit.jar
因此,如果脚本变得更加复杂,您不必为其写一长行screen
,因此screen
命令可以保持不变,只需:
screen -d -m -S bukkit path/to/bukkit.sh
答案2
您应该update-rc.d
按照以下步骤在启动时启用服务:
# update-rc.d cron defaults