I'm running Ubuntu Server 14.04.2 LTS. I was trying to add java app (minecraft) to startup using init.d config. Here's a snippet:
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
}
When I issue sudo service minecraft start
everything is fine, I can see the screen session in htop and sudo screen -list
prints out the screen session. I also can attach it with sudo service minecraft attach
or sudo screen -x
.
But after sudo update-rc.d minecraft defaults
and rebooting server, though I can see the screen session in htop, it is not listed in sudo screen -list
and I can no longer attach it!
I tried using crontabs as root or my user with no success.
Here is my full init.d script.
It came out that you had to specify shell explicitly with
bash -c "cd $MINECRAFT_DIR && screen -dmS $SCREEN_NAME $START_COMMAND"
Or if you run it as user, you can
USERNAME='minecraft'
INVOCATION="cd $MINECRAFT_DIR && screen -dmS $SCREEN_NAME $START_COMMAND"
su - "$USERNAME" -s /bin/bash -c "$INVOCATION"
Thanks this for giving the idea.