Что необходимо для поддержки сервиса 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
Geo
источник
это ваш сервис в 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
источник
Дополнительное место во второй строке было добавлено уценкой, она не нужна
katriel
2
Вот еще немного информации об уровнях запуска и других вещах. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
Хотя вышеприведенное не добавляет правильных сценариев уничтожения. Мне нужно отключить chkconfig <service> --level 06, чтобы явно получить сценарии уничтожения.
user239558
4

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

Камил Кисиэль
источник
5
Теоретически хороший совет, но /etc/init.d/skeletonего нет в системах RHEL, только в Debian и связанных с ним (Ubuntu, я думаю).
Харлан
1

Похоже, что конкретная проблема Geo уже решена, но я столкнулся с похожим сообщением, пытаясь настроить приложение 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 и попробовал снова. Вот глава моего сценария инициализации:

#!/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для соответствующих уровней запуска.

Topher Hunt
источник
0

Номера приоритетов не должны быть уникальными. Они только представляют заказ услуг.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 root root 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 не было проблем с добавлением службы "it". В противном случае вы будете ограничены 100 услугами.

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

Георгий Замроз
источник