Linux 服务需要什么才能被 chkconfig 支持?

Linux 服务需要什么才能被 chkconfig 支持?

我正在尝试通过以下方式将 Linux 服务添加到启动时自动启动中

chkconfig -add <servicename> 

我收到一条消息说

service <servicename> does not support chkconfig

我正在使用 Red Hat Enterprise 4。我尝试添加到启动时自动启动的脚本如下:

#!/bin/sh

soffice_start() {   if [ -x /opt/openoffice.org2.4/program/soffice ]; then
        echo "Starting Open Office as a Service"
        #echo " soffice -headless -accept=socket,port=8100;urp;StarOffice.ServiceManager
-nofirststartwizard"
        /opt/openoffice.org2.4/program/soffice
-headless -accept="socket,host=0.0.0.0,port=8100;urp;StarOffice.ServiceManager"
-nofirststartwizard &   else
        echo "Error: Could not find the soffice program. Cannot Start SOffice."   fi }

soffice_stop() {   if [ -x /usr/bin/killall ]; then
        echo "Stopping Openoffice"
        /usr/bin/killall soffice 2> /dev/null   else
        echo "Eroor: Could not find killall.  Cannot Stop soffice."   fi }

case "$1" in  'start')    soffice_start    ;;  'stop')    soffice_stop    sleep 2    ;;  'restart')    soffice_stop    sleep 5  soffice_start    ;;  *)    if [ -x /usr/bin/basename ]; then
        echo "usage: '/usr/bin/basename $0' start| stop| restart"    else
        echo "usage: $0 start|stop|restart"    fi esac

答案1

该脚本必须有两行:

# chkconfig: <levels> <start> <stop>
# description: <some description>

例如:

# chkconfig: 345 99 01
# description: some startup script

345 - levels to configure
99 - startup order
01 - stop order

添加上述标题后,您就可以运行chkconfig --add <service>

答案2

虽然 katriel 已经回答了创建 init 脚本所需的最低要求,但我认为您也可以查看/etc/init.d/skeleton并使用该模板作为 init 脚本的基础。您最终会得到一个更加一致且可读的脚本。

答案3

听起来 Geo 的具体问题已经解决了,但我在尝试设置 Rails 应用程序作为sidekiq托管服务时遇到了类似的消息。我将在这里解释我的解决方案,希望它能帮助其他像我一样的新手。

我正在安装 CentOS,chkconfig 已设置了其他几个服务,如 httpd、mysql 和 redis。请注意,大多数服务只需在运行级别上启用3即可5

chkconfig --list
> httpd             0:off   1:off   2:on    3:on    4:on    5:on    6:off
> mysqld            0:off   1:off   2:on    3:on    4:on    5:on    6:off
> redis-server      0:off   1:off   2:on    3:on    4:on    5:on    6:off
> (etc...)

我需要为该sidekiq服务添加一个新脚本,因此我获取了以下脚本:https://gist.github.com/CD1212/5326706,对其进行修改以适合我的应用程序的参数,然后将其保存在/etc/rc.d/init.d/sidekiq(与那里的所有其他脚本一样,由 root 拥有)。

但是,当我尝试注册这个新服务时,出现了 chkconfig 错误:

sudo chkconfig --add sidekiq
> service sidekiq does not support chkconfig

一些额外的阅读我发现每个 chkconfig 脚本顶部定义的优先级数字必须是唯一的。如果错误消息更清晰就好了!另一个脚本的关闭优先级为 75,所以我将我的脚本更改为 76 并重试。这是我的 init 脚本的开头:

#!/bin/bash
#
# sidekiq    Init script for Sidekiq
#
# chkconfig: 345 99 76
# processname: sidekiq
# pidfile: /var/www/visual_testing_tool/sidekiq.pid
# description: Starts and Stops Sidekiq message processor for the Rails app.
#

这次,sudo chkconfig --add sidekiq没有出现任何抱怨。然后当我运行 时sudo chkconfig --list sidekiq,sidekiq 服务显示为on适当的运行级别。

答案4

优先级数字不需要是唯一的。它们仅代表服务的顺序。

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 root root 16 9 月 16 日 12:28 /etc/rc.d/rc3.d/S99oracle -> ../init.d/oracle

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 root root 12 Sep 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

Chkconfig 在添加“它”服务时没有遇到问题。否则,您将被限制为 100 个服务。

另外在我的示例中,它会在 oracle 之前运行,因为脚本是按字母顺序运行的。

相关内容