我正在运行Ubuntu Server 14.04.2 LTS。我试图使用init.d config将java app(minecraft)添加到启动中。这是一个片段:
MINECRAFT_DIR="/srv/minecraft-server"
START_COMMAND="java -Xincgc -Xmx8G -XX:MaxPermSize=128M -jar Spigot.jar"
SCREEN_NAME="minecraft-server"
attach() {
screen -Rx $SCREEN_NAME
}
start() {
echo "Starting minecraft server..."
if cd $MINECRAFT_DIR && screen -dmS $SCREEN_NAME $START_COMMAND; then
echo "Minecraft server started. Use 'sudo service minecraft attach'."
fi
}
当我发布sudo service minecraft start
一切正常时,我可以看到htop 和 sudo screen -list
中的屏幕会话打印出屏幕会话。我也可以将其附加到sudo service minecraft attach
或sudo screen -x
。
但在sudo update-rc.d minecraft defaults
并重新启动服务器之后,虽然我可以在htop中看到屏幕会话,但它未列在sudo screen -list
中,我再也无法附加它了!
我尝试使用crontabs作为root或我的用户但没有成功。
Here是我的完整init.d脚本。
答案 0 :(得分:0)
你必须明确指定shell
bash -c "cd $MINECRAFT_DIR && screen -dmS $SCREEN_NAME $START_COMMAND"
或者如果您以用户身份运行它,您可以
USERNAME='minecraft'
INVOCATION="cd $MINECRAFT_DIR && screen -dmS $SCREEN_NAME $START_COMMAND"
su - "$USERNAME" -s /bin/bash -c "$INVOCATION"
感谢this提供了这个想法。