无法附加屏幕会话

Can't attach screen session

我是 运行 Ubuntu 服务器 14.04.2 LTS。我试图使用 init.d 配置将 java 应用程序(我的世界)添加到启动。这是一个片段:

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 attachsudo screen -x.

附加它

但是在 sudo update-rc.d minecraft defaults 并重新启动服务器后,虽然我可以在 htop 中看到屏幕会话,但它没有在 sudo screen -list 中列出,我无法再附加它!

我尝试以 root 或我的用户身份使用 crontabs 但没有成功。

Here 是我的完整 init.d 脚本。

原来你必须用

明确指定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 提出想法。