Search code examples
ubuntustartupgnu-screen

Can't attach screen session


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.


Solution

  • 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.