chkconfig支持linux服务需要什么?


36

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

chkconfig -add <servicename> 

我收到一条消息说

service <servicename> does not support chkconfig

我正在使用Red Hat Enterprise4。我试图在引导时添加到自动启动的脚本如下:

#!/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

是init.d /的服务
吗?

Answers:


74

该脚本必须有2行:

# 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>


markdown在第二行增加了多余的空间,不需要
katriel

2
这是有关运行级别和其他内容的更多信息。tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
强的松

上面似乎并没有添加适当的kill脚本。我需要关闭chkconfig <service> --level 06才能明确获得kill脚本。
user239558

4

尽管katriel已经用创建初始化脚本所需的最低限度回答了这一问题,但我认为您也可以很好地/etc/init.d/skeleton将其用作模板并将其用作创建初始化脚本的模板。您将获得一个更加一致和易读的脚本。


5
从理论上讲是很好的建议,但/etc/init.d/skeleton在RHEL系统上不存在,仅在Debian及其相关版本上存在(我认为是Ubuntu)。
哈兰

1

听起来Geo的特定问题已经解决,但是在尝试将Rails应用设置sidekiq为托管服务时遇到了类似的消息。我将在这里解释我的解决方案,以防它对像我这样的其他新手有所帮助。

我正在CentOS上进行安装,并且chkconfig已经通过httpd,mysql和redis等其他服务进行了设置。请注意,大多数服务只需要在运行级别启用35

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,然后重试。这是我的初始化脚本的标题:

#!/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用于相应的运行级别。


0

优先级编号不必唯一。它们仅代表服务顺序。

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 root root 16 Sep 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在添加“ it”服务时没有问题。否则,您将只能使用100个服务。

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

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.