Co jest potrzebne, aby usługa linux była obsługiwana przez chkconfig?

36

Usiłuję dodać do automatycznego uruchamiania w czasie wolnym usługę linux za pośrednictwem

chkconfig -add <servicename> 

i dostaję wiadomość z informacją

service <servicename> does not support chkconfig

Korzystam z Red Hat Enterprise 4. Skrypt, który próbuję dodać do autostartu podczas uruchamiania, jest następujący:

#!/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
źródło
jest twoja usługa w
init.d

Odpowiedzi:

74

Skrypt musi mieć 2 linie:

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

na przykład:

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

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

Po dodaniu powyższych nagłówków możesz uruchomić chkconfig --add <service>.

katriel
źródło
Dodatkowe miejsce w drugiej linii zostało dodane przez markdown, nie jest potrzebne
katriel
2
Oto kilka dodatkowych informacji na temat poziomów uruchamiania i innych rzeczy. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
Powyższe wydaje się jednak nie dodawać odpowiednich skryptów zabijania. Potrzebuję chkconfig <usługa> - poziom 06 wyłączony, aby jawnie pobrać skrypty zabijania.
user239558
4

Chociaż Katriel odpowiedziała już na to absolutne minimum potrzebne do utworzenia skryptu inicjującego, myślę, że dobrze byłoby, gdybyś spojrzał /etc/init.d/skeletoni używał go jako szablonu, na którym oparłby swój skrypt inicjujący. Skończysz z bardziej spójnym i czytelnym skryptem.

Kamil Kisiel
źródło
5
Teoretycznie dobra rada, ale /etc/init.d/skeletonnie jest obecna na systemach RHEL, tylko na Debianie i pokrewnych (chyba Ubuntu).
Harlan
1

Wygląda na to, że specyficzny problem Geo został już rozwiązany, ale napotkałem podobny komunikat, próbując skonfigurować aplikację Rails z sidekiqusługą zarządzaną. Wyjaśnię tutaj moje rozwiązanie, na wypadek gdyby pomogło to innym początkującym, takim jak ja.

Pracuję nad instalacją CentOS, a chkconfig jest już skonfigurowany z kilkoma innymi usługami, takimi jak httpd, mysql i redis. Należy pamiętać, że większość usług musi być włączona tylko na poziomach uruchamiania 3przez 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...)

Musiałem dodać nowy skrypt do sidekiqusługi, więc złapałem skrypt pod adresem https://gist.github.com/CD1212/5326706 , zmodyfikowałem go, aby pasował do parametrów mojej aplikacji, i zapisałem go w /etc/rc.d/init.d/sidekiq(własność root jak wszystkie inne skrypty tam).

Jednak gdy próbowałem zarejestrować tę nową usługę, wystąpił błąd chkconfig:

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

Po kilku dodatkowych lekturach odkryłem, że numery priorytetów zdefiniowane u góry każdego skryptu chkconfig muszą być unikalne. Jaśniejszy komunikat o błędzie byłby miły! Inny skrypt miał priorytetowy priorytet zamknięcia 75, więc zmieniłem mój na 76 i spróbowałem ponownie. Oto głowa mojego skryptu inicjującego:

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

Tym razem sudo chkconfig --add sidekiqnie złożyłem skargi. Następnie, gdy uruchomiłem sudo chkconfig --list sidekiq, usługa sidekiq była wyświetlana jak ondla odpowiednich poziomów uruchamiania.

Topher Hunt
źródło
0

Numery priorytetowe nie muszą być unikalne. Reprezentują jedynie zamówienie usług.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 root root 16 września 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 września 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

Chkconfig nie miał problemu z dodaniem usługi „it”. W przeciwnym razie byłbyś ograniczony do 100 usług.

Również w moim przykładzie działałby on przed Oracle, ponieważ skrypty są uruchamiane alfabetycznie.

George Zamroz
źródło