Bir linux hizmetinin chkconfig tarafından desteklenmesi için neler gereklidir?


36

Ben boottime otomatik start eklemek için bir linux hizmeti ile çalışıyorum

chkconfig -add <servicename> 

ve şöyle bir mesaj alıyorum:

service <servicename> does not support chkconfig

Red Hat Enterprise 4 kullanıyorum. Boottime'da autostart'a eklemeye çalıştığım senaryo şudur:

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

hizmetinizde init.d /
Rungano

Yanıtlar:


74

Komut dosyası 2 satır içermelidir:

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

Örneğin:

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

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

Yukarıdaki başlıkları ekledikten sonra çalıştırabilirsiniz chkconfig --add <service>.


İkinci satırdaki fazladan boşluk
markdown

2
İşte Çalışma Seviyeleri ve diğer şeyler hakkında daha fazla bilgi. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Ağustos'ta

Yukarıdakiler olsa da uygun öldürme komut dosyalarını eklemek gibi gözükmüyor. Öldürme komut dosyalarını açıkça almak için chkconfig <service> - düzey 06'a ihtiyacım var.
user239558

4

Katriel, bunu bir init betiği oluşturmak için gerekli olan minimum değerle cevaplamış olsa da, init betiğinizi temel alacağınız /etc/init.d/skeletonbir şablon olarak görüp kullanmanızın iyi olacağını düşünüyorum . Çok daha tutarlı ve okunabilir bir senaryo ile biteceksin.


5
Teorik olarak iyi tavsiye, ancak /etc/init.d/skeletonRHEL sistemlerinde mevcut değil, sadece Debian ve ilgili (Ubuntu, sanırım).
Harlan

1

Geo'un kendine özgü sorunu zaten çözülmüş gibi görünüyor, ancak bir Rails uygulamasını sidekiqyönetilen bir servis olarak kurmaya çalışırken de benzer bir mesajla karşılaştım . Benim gibi diğer yeni doğanlara yardımcı olması durumunda çözümümü burada açıklayacağım.

Bir CentOS yüklemesi üzerinde çalışıyorum ve chkconfig zaten httpd, mysql ve redis gibi başka servislerle kurulmuştu. En hizmetleri yalnızca çalışma seviyelerine etkinleştirilmesi gerektiğini unutmayın 3yoluyla 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...)

sidekiqHizmet için yeni bir komut dosyası eklemem gerekiyordu , bu yüzden komut dosyasını https://gist.github.com/CD1212/5326706 adresinden aldım, uygulamamın parametrelerine uyacak şekilde değiştirdim ve kaydetmiştim /etc/rc.d/init.d/sidekiq(sahip olduğu tüm root gibi) orada diğer komut dosyaları).

Ancak bu yeni hizmeti kaydetmeye çalıştığımda chkconfig hatası alıyorum:

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

Bazı ekstra okumalardan sonra , her chkconfig betiğinin üstünde tanımlanan öncelik numaralarının benzersiz olması gerektiğini keşfettim. Daha net bir hata mesajı iyi olurdu! Başka bir senaryoda kapatma öncelik seviyesi 75 vardı, bu yüzden mayını 76 olarak değiştirdim ve tekrar denedim. İşte init betiğimin başı:

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

Bu kez sudo chkconfig --add sidekiqşikayetçi olmadı. Sonra koştuğumda sudo chkconfig --list sidekiq, sidekiq servisi onuygun çalışma seviyelerinde olduğu gibi gösterildi .


0

Öncelikli numaraların benzersiz olması gerekmez. Yalnızca hizmet siparişini temsil eder.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 kök kökü 16 Eylül 16 12:28 /etc/rc.d/rc3.d/S99oracle -> ../init.d/oracle

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 kök kökü 12 Eyl 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

Chkconfig "it" hizmetini eklerken bir sorun yoktu. Aksi takdirde, 100 servisle sınırlı kalacaksınız.

Ayrıca benim örneğimde, senaryolar alfabetik olarak çalıştırıldığı için kahinten önce çalıştırılacaktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.