init.d脚本在启动时未运行


15

我正在使用屏幕在专用服务器上托管一些Counter-Strike游戏服务器。我具有要启动/停止服务器时运行的脚本:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

我将这个脚本(称为css-servers)放进/etc/init.d/去,据我所知,这意味着它会在系统启动时运行。但是,当我使用检查活动屏幕时screen -ls,没有任何运行。

如何使它们在Ubuntu Server下启动时运行?

Answers:


33

仅存在脚本/etc/init.d不足以使其在启动时运行。

要将其添加到启动中,您必须告知Ubuntu:

sudo update-rc.d css-servers defaults

然后,如果脚本格式正确,设置了可执行位等,它应该在下次启动时启动。从apt-get/ Software Center 安装的软件包会自动为您运行此命令或等效命令,这就是为什么您通常不必担心的原因关于它。

如果要立即启动,可以直接调用它:

sudo service css-servers start

这是非常奇怪的。直到现在,我的脚本在启动时都运行而没有此update-rc.d命令。我更新了脚本,然后直到运行此命令,脚本才开始运行。谢谢。顺便说一句,我们如何才能在启动时从运行中“注销”它(就像我们对update-rc.d所做的那样)?
Nikos

1
@ Nik-Lz该问答涉及使用新贵的Ubuntu的旧版本和过时版本。不应再使用它,而应使用当前的systemd(使用完全不同的服务系统)。
迈克尔·汉普顿'18

7

您已经完成了第一部分。 /etc/init.d是运行初始化脚本的位置。但是,它们不会自动运行。

它们按照符号链接/etc/rc*.d目录指定的顺序运行。每个运行级别都有其自己的目录。链接名称开头的脚本使用Kstop参数运行,而名称开头的脚本则使用Sstart参数运行。按照惯例,文件名以用于排序的两位数开头KS后跟两位数,并以中的脚本名称结尾/etc/init.d

链接可以手动创建,但通常使用脚本创建。通用脚本update-rc.d在Ubuntu上可用。该命令man update-rc.d将为您提供有关谁使用它的文档。在您的情况下,请尝试:

sudo update-rc.d css-servers defaults

要使用init脚本启动它,请尝试:

sudo /etc/init.d/css-servers start

我通常以这种方式启动和停止服务器,以确保脚本按预期工作。然后,我运行update-rc.d将其添加到/etc/rc.d运行级别目录。


1

如果您没有任何线索,为什么您的服务无法在启动时启动。但是,当您尝试手动启动服务时,它可以正常工作service <your service> start。在这种情况下,请尝试将标准输出和错误输出重定向到某个文件。这可能会为您提供一些线索,说明启动系统时为何无法启动它。

例如在脚本中

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.