Was wird benötigt, damit ein Linux-Dienst von chkconfig unterstützt wird?

36

Ich versuche, dem Autostart zur Startzeit einen Linux-Dienst über das Internet hinzuzufügen

chkconfig -add <servicename> 

und ich bekomme eine nachricht sagen

service <servicename> does not support chkconfig

Ich verwende Red Hat Enterprise 4. Das Skript, das ich zur Startzeit zum Autostart hinzufügen möchte, ist das folgende:

#!/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
Geo
quelle
ist Ihr Dienst in init.d /
Rungano

Antworten:

74

Das Skript muss 2 Zeilen haben:

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

zum Beispiel:

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

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

Nachdem Sie die obigen Header hinzugefügt haben, können Sie ausführen chkconfig --add <service>.

katriel
quelle
Der zusätzliche Platz in der zweiten Zeile wurde durch
Abschriften
2
Hier finden Sie weitere Informationen zu den Run-Levels und anderen Dingen. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
Das obige scheint jedoch nicht die richtigen Kill-Skripte hinzuzufügen. Ich brauche chkconfig <service> --level 06 off, um die Kill-Skripte explizit abzurufen.
user239558
4

Während Katriel dies bereits mit dem Nötigsten beantwortet hat, das zum Erstellen eines Init-Skripts erforderlich ist, sind Sie meiner Meinung nach auch in der Lage, dieses /etc/init.d/skeletonals Vorlage für Ihr Init-Skript zu betrachten und zu verwenden. Sie erhalten ein viel konsistenteres und lesbareres Skript.

Kamil Kisiel
quelle
5
Theoretisch gute Ratschläge, aber /etc/init.d/skeletonauf RHEL-Systemen nicht vorhanden, nur auf Debian und verwandten (Ubuntu, denke ich).
Harlan
1

Es hört sich so an, als ob das spezifische Problem von Geo bereits gelöst ist, aber ich bin auf eine ähnliche Meldung gestoßen, als ich versuchte, eine Rails-App sidekiqals verwalteten Dienst einzurichten . Ich werde meine Lösung hier erklären, falls es anderen Neulingen wie mir hilft.

Ich arbeite an einer CentOS-Installation und chkconfig ist bereits mit mehreren anderen Diensten wie httpd, mysql und redis eingerichtet. Beachten Sie, dass die meisten Dienste nur auf Runlevels 3durch aktiviert werden müssen 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...)

Ich musste ein neues Skript für den sidekiqDienst hinzufügen , also habe ich das Skript unter https://gist.github.com/CD1212/5326706 abgerufen , es an die Parameter meiner App angepasst und unter /etc/rc.d/init.d/sidekiq(im Besitz von root wie alle anderen) gespeichert andere Skripte dort).

Als ich jedoch versuchte, diesen neuen Dienst zu registrieren, erhielt ich den Fehler chkconfig:

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

Nach einigem Nachlesen stellte ich fest, dass die Prioritätsnummern, die oben in jedem chkconfig-Skript definiert sind, eindeutig sein müssen. Eine klarere Fehlermeldung wäre schön gewesen! Ein anderes Skript hatte die Priorität 75 für das Herunterfahren, daher habe ich mein Skript auf 76 geändert und es erneut versucht. Hier ist der Kopf meines Init-Skripts:

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

Diesmal sudo chkconfig --add sidekiqgab es keine Beschwerde. Als ich dann lief sudo chkconfig --list sidekiq, wurde der Sidekiq-Dienst onfür die entsprechenden Runlevel angezeigt .

Topher Hunt
quelle
0

Die Prioritätsnummern müssen nicht eindeutig sein. Sie stellen nur eine Bestellung von Dienstleistungen dar.

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 hatte kein Problem beim Hinzufügen des "it" -Dienstes. Andernfalls wären Sie auf 100 Dienste beschränkt.

Auch in meinem Beispiel würde es vor Oracle ausgeführt, da die Skripte alphabetisch ausgeführt werden.

George Zamroz
quelle