Apa yang diperlukan agar layanan linux didukung oleh chkconfig?


36

Saya mencoba untuk menambah auto start di boottime layanan linux melalui

chkconfig -add <servicename> 

dan saya mendapatkan pesan yang mengatakan

service <servicename> does not support chkconfig

Saya menggunakan Red Hat Enterprise 4. Skrip yang saya coba tambahkan ke autostart pada boottime adalah sebagai berikut:

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

adalah layanan Anda di init.d /
Rungano

Jawaban:


74

Skrip harus memiliki 2 baris:

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

sebagai contoh:

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

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

Setelah Anda menambahkan header di atas, Anda dapat menjalankan chkconfig --add <service>.


Ruang tambahan pada baris kedua ditambahkan oleh penurunan harga, tidak diperlukan
katriel

2
Berikut adalah beberapa informasi lebih lanjut tentang Run Levels dan hal-hal lain. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred

Di atas tampaknya tidak menambahkan skrip kill yang tepat. Saya perlu chkconfig <service> --level 06 off untuk secara eksplisit mendapatkan skrip kill.
user239558

4

Sementara katriel telah menjawab ini dengan minimum yang diperlukan untuk membuat skrip init, saya pikir Anda juga akan dilayani dengan baik dengan melihat /etc/init.d/skeletondan menggunakannya sebagai templat yang menjadi dasar skrip init Anda. Anda akan berakhir dengan skrip yang jauh lebih konsisten dan mudah dibaca.


5
Saran yang secara teoritis bagus, tetapi /etc/init.d/skeletontidak ada pada sistem RHEL, hanya pada Debian dan yang terkait (Ubuntu, saya pikir).
Harlan

1

Sepertinya masalah spesifik Geo telah dipecahkan, tetapi saya mengalami pesan serupa ketika mencoba mengatur aplikasi Rails dengan sidekiqlayanan terkelola. Saya akan menjelaskan solusi saya di sini jika itu membantu pemula lain seperti saya.

Saya sedang mengerjakan instalasi CentOS, dan chkconfig sudah diatur dengan beberapa layanan lain seperti httpd, mysql, dan redis. Perhatikan bahwa sebagian besar layanan hanya perlu diaktifkan pada runlevels 3through 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...)

Saya perlu menambahkan skrip baru untuk sidekiqlayanan ini, jadi saya mengambil skrip di https://gist.github.com/CD1212/5326706 , memodifikasinya agar sesuai dengan parameter aplikasi saya, dan menyimpannya di /etc/rc.d/init.d/sidekiq(dimiliki oleh root seperti semua skrip lain di sana).

Namun ketika saya mencoba mendaftar layanan baru ini, saya mendapatkan kesalahan chkconfig:

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

Setelah beberapa bacaan tambahan saya menemukan bahwa angka-angka prioritas yang ditentukan di bagian atas setiap skrip chkconfig harus unik. Pesan kesalahan yang lebih jelas pasti menyenangkan! Script lain memiliki level shutdown prioritas 75, jadi saya mengubah milik saya menjadi 76 dan mencoba lagi. Inilah kepala skrip init saya:

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

Kali ini, sudo chkconfig --add sidekiqtidak memberikan keluhan. Kemudian ketika saya berlari sudo chkconfig --list sidekiq, layanan sidekiq ditampilkan onuntuk runlevel yang sesuai.


0

Angka-angka prioritas tidak perlu unik. Mereka hanya mewakili pesanan layanan.

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 tidak memiliki masalah menambahkan layanan "it". Kalau tidak, Anda akan dibatasi hingga 100 layanan.

Juga dalam contoh saya, ini akan berjalan sebelum oracle karena skrip dijalankan secara alfabet.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.