类似的问题:Using screen to startup a minecraft server(linux debian) 系统: Ubuntu 14.04 AMD64
我正在尝试运行一个在启动时运行的守护进程,所以我决定使用init脚本。我想与守护进程控制台进行交互,但没有将其输出到主屏幕。我决定使用屏幕实用程序创建一个名为“minecraft”的屏幕,在后台运行守护进程,然后在需要运行命令时使用屏幕-R重新连接到它。
我在启动时存在的问题,登录后,我看到使用screen命令成功启动了进程,但屏幕-ls和屏幕-R结果没有结果(在/ var / run / screen / S中找不到套接字) -根)。我将所有屏幕命令作为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
}
现在,如果我通过ssh(sudo service minecraft restart)手动运行它,那么这个init脚本可以正常运行,然后我可以看到我的屏幕了!
$ sudo screen -ls 有一个屏幕: 1666.minecraft(14-10-23 12:35:56 PM)(独立式) 1个/ var / run / screen / S-root中的套接字。
但每当我重新启动机器时,屏幕命令都不会创建屏幕,但它看起来像是在ps下:
$ ps aux | grep我的 SCREEN -dmS minecraft java -X ...
TL; DR (希望不是) 使用屏幕进行daemonize进程的初始化脚本通过命令行工作,但是从启动过程运行后将无效。
我怀疑这是因为屏幕依赖于其他进程,如tty终端等,但我可以弄清楚需要什么 - 启动我需要更改init脚本的顺序
修改1:
尝试添加:required-start:屏幕清理来自以下内容: http://minecraft.gamepedia.com/Tutorials/Server_startup_script
没有工作..
编辑2:
我使用 sleep 解决了问题并推送到后台。
bash -c "sleep 30 && screen -dmS $NAME java -Xmx...nogui"& <--- important
但我想知道如何将这个init脚本延迟到最后。
编辑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(这是我选择的随机数)运行。
我想虽然我想知道我是对的,但这个问题已得到解答。