web-dev-qa-db-ja.com

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
35
Geo

スクリプトには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>を実行できます。

73
katriel

カトリエルはすでにinitスクリプトを作成するために最低限必要なことでこれに答えていますが、/etc/init.d/skeletonを使用して、initスクリプトのベースとなるテンプレートとして使用します。最終的には、はるかに一貫性があり、読みやすいスクリプトになります。

4
Kamil Kisiel

Geoの特定の問題はすでに解決されているようですが、Rails app with sidekiq with a managed service。I'll私のような他の初心者を助ける場合に備えて、ここで私の解決策を説明してください。

私は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に変更して再試行しました。これが私の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として表示されました。

1
Topher Hunt

優先番号は一意である必要はありません。それらはサービスの順序を表すだけです。

ls -l /etc/rc.d/rc3.d/*Oracle lrwxrwxrwx 1ルートルート16 Sep 16 12:28 /etc/rc.d/rc3.d/S99Oracle-> ../init.d/Oracle

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

Chkconfigには「it」サービスの追加に関する問題はありませんでした。それ以外の場合は、100サービスに制限されます。

また、私の例では、スクリプトがアルファベット順に実行されるため、Oracleより前に実行されます。

0
George Zamroz