类似的问题:Using screen to startup a minecraft server(linux debian)系统:Ubuntu 14.04 amd64

我正在尝试运行一个在启动时运行的守护进程,所以我决定使用init脚本 . 我想与守护进程控制台进行交互,但没有将其输出到主屏幕 . 我决定使用屏幕实用程序创建一个名为“minecraft”的屏幕,在后台运行守护程序,然后在需要运行命令时使用屏幕-R重新连接到它 .

我在启动时存在的问题,登录后,我看到进程成功启动了屏幕命令但屏幕-ls和屏幕-R结果没有结果(在/ var / run / screen / S-root中找不到套接字) . 我将所有屏幕命令作为sudo运行,因为init脚本引导服务器 .

我的初始化脚本:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          minecraft
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Minecraft Server
# Description:       Minecraft Server bootup script
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Minecraft server instance"
NAME=minecraft
DAEMON_USER=minecraft
DAEMON=minecraft_server.1.8.jar
MCPATH=/home/minecraft/server
SCRIPTNAME=/etc/init.d/$NAME
MAX_HEAP=1024
MIN_HEAP=1024

do_start()
{
    echo "Starting..."
    cd $MCPATH
    screen -dmS $NAME java -Xmx${MAX_HEAP}M -Xms${MIN_HEAP}M -jar $DAEMON nogui
}

现在这个init脚本可以正常工作,如果我通过ssh手动运行它(sudo service minecraft restart),然后我可以看到我的屏幕!

$ sudo screen -ls有一个屏幕:1666.minecraft(14-10-23 12:35:56 PM)(已分离)1个/ var / run / screen / S-root中的套接字 .

但每当我重新启动机器时,屏幕命令都不会创建屏幕,但它看起来像是在ps下:

$ ps aux | grep mine SCREEN -dmS minecraft java -X ...

TL;DR (希望不是)使用屏幕进行daemonize进程的初始化脚本通过命令行工作,但是从启动过程运行后无效 .

我怀疑这是因为屏幕依赖于其他进程,如tty终端等,但我可以弄清楚需要什么,我需要更改init脚本的顺序

Edit 1:

尝试添加:required-start:从以下屏幕清理:http://minecraft.gamepedia.com/Tutorials/Server_startup_script

没工作..

Edit 2:

我使用睡眠修复了问题并推送到背景 .

bash -c "sleep 30 && screen -dmS $NAME java -Xmx...nogui"&   <--- important

但我想知道如何延迟这个init脚本直到最后 .

Edit 3:

找到一种方法暂停initscript尽可能运行 .

我的问题:我的ubuntu版本14.04使用与sysv(/etc/init.d)混合的upstart(/ etc / init) . 我正在使用一个旧的init脚本样式,他们正试图逐步淘汰 . 取决于具有必需的服务 - 启动与sysv似乎不能正常工作所以我修改了我的运行级别以尽可能晚地启动我的运行 .

$ update-rc.d -f minecraft remove
$ update-rc.d -f minecraft start 99 S . stop 31 0 1 6 .

这是什么意思呢?阅读LSB初始化脚本,基本上我的工作被告知在启动(最新)时优先级为99,停止时为31(这是我选择的随机数) .

虽然我想知道我是否正确,但我想这个问题已得到解答 .