สิ่งที่จำเป็นสำหรับบริการ 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>หลังจากที่คุณเพิ่มส่วนหัวข้างต้นคุณสามารถเรียกใช้


พื้นที่พิเศษในบรรทัดที่สองถูกเพิ่มโดย markdown มันไม่จำเป็นต้อง
Katriel

2
นี่คือข้อมูลเพิ่มเติมเกี่ยวกับ Run Level และสิ่งอื่น ๆ tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred

ดูเหมือนว่าข้างต้นจะไม่เพิ่มสคริปต์การฆ่าที่เหมาะสม ฉันต้องการ chkconfig <service> - ระดับ 06 ปิดเพื่อรับสคริปต์การฆ่าอย่างชัดเจน
user239558

4

ในขณะที่ katriel ตอบคำถามนี้แล้วด้วยค่าต่ำสุดที่จำเป็นในการสร้างสคริปต์เริ่มต้นฉันคิดว่าคุณจะได้รับการบริการที่ดีเมื่อมองดู/etc/init.d/skeletonและใช้งานเป็นแม่แบบที่จะใช้สคริปต์เริ่มต้นของคุณ คุณจะจบลงด้วยสคริปต์ที่สอดคล้องและอ่านได้มากขึ้น


5
คำแนะนำที่ดีในทางทฤษฎี แต่/etc/init.d/skeletonไม่มีในระบบ RHEL เฉพาะใน Debian และที่เกี่ยวข้อง (Ubuntu ฉันคิดว่า)
Harlan

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สำหรับ runlevels ที่เหมาะสม


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 เพราะสคริปต์จะทำงานตามลำดับตัวอักษร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.