Що потрібно, щоб сервіс linux підтримувався chkconfig?


36

Я намагаюся додати до автозапуску під час завантаження службу 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

ваша послуга в init.d /
Rungano

Відповіді:


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


Додатковий простір у другому рядку додано відміткою, воно не потрібно
katriel

2
Ось додаткова інформація про рівні запуску та інші речі. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred

Згадане вище, здається, не додає належних сценаріїв вбивства. Мені потрібен chkconfig <service> - level 06 off, щоб явно отримати скрипти вбивства.
user239558

4

Хоча katriel вже відповів на це з мінімальним необхідним для створення сценарію init, я думаю, вам також вдалося б переглядати /etc/init.d/skeletonі використовувати це як шаблон, на якому можна базувати свій сценарій init. У вас вийде набагато більш послідовний і читабельний сценарій.


5
Теоретично хороша порада, але /etc/init.d/skeletonїї немає в системах RHEL, тільки на Debian і пов'язаних з ними (я думаю, Ubuntu).
Харлан

1

Здається, певна проблема Гео вже вирішена, але я наткнувся на подібне повідомлення, намагаючись створити додаток 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для відповідних рівнів.


0

Номери пріоритету не повинні бути унікальними. Вони представляють лише замовлення послуг.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 корінь кореня 16 вересня 16 12:28 /etc/rc.d/rc3.d/S99oracle -> ../init.d/oracle

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 корінь кореня 12 вересня 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

У Chkconfig не виникло проблеми щодо додавання послуги "це". В іншому випадку ви будете обмежені 100 послугами.

Також у моєму прикладі він би запускався перед Oracle, оскільки сценарії виконуються за алфавітом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.