chkconfig가 Linux 서비스를 지원하려면 무엇이 필요합니까?


36

부팅시 리눅스 서비스를 통해 자동 시작에 추가하려고합니다.

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에 의해 추가
되었으므로

2
실행 레벨 및 기타 사항에 대한 추가 정보가 있습니다. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred

위의 내용은 적절한 kill 스크립트를 추가하지 않는 것 같습니다. 킬 스크립트를 명시 적으로 가져 오려면 chkconfig <service> --level 06을 해제해야합니다.
user239558

4

katriel은 이미 init 스크립트를 만드는 데 필요한 최소한의 답변으로 이것에 대답했지만, init 스크립트 /etc/init.d/skeleton를 기반으로하는 템플릿으로 보고 사용하는 것이 좋을 것이라고 생각합니다 . 당신은 훨씬 더 일관되고 읽기 쉬운 스크립트로 끝날 것입니다.


5
이론적으로 좋은 조언이지만 /etc/init.d/skeletonRHEL 시스템 에는 없지만 데비안 및 관련 제품에만 있습니다 (우분투, 나는 생각합니다).
Harlan

1

Geo의 특정 문제가 이미 해결 된 것처럼 들리지만 sidekiq관리 서비스로 Rails 앱을 설정하려고 할 때 비슷한 메시지가 표시 됩니다. 나 같은 다른 초보자를 도울 수 있도록 여기에 내 솔루션을 설명하겠습니다.

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. 거기에 다른 스크립트).

그러나이 새로운 서비스를 등록하려고 할 때 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 sidekiqsidekiq 서비스가 on적절한 런레벨에 대해 표시되었습니다 .


0

우선 순위 번호는 고유하지 않아도됩니다. 서비스 순서 만 나타냅니다.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 루트 루트 16 9 월 16 일 12:28 /etc/rc.d/rc3.d/S99oracle-> ../init.d/oracle

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 루트 루트 12 9 월 16 일 12:36 /etc/rc.d/rc3.d/S99it-> ../init.d/it

Chkconfig에 "it"서비스를 추가하는 데 문제가 없었습니다. 그렇지 않으면 100 개의 서비스로 제한됩니다.

또한 내 예제에서는 스크립트가 알파벳순으로 실행되기 때문에 오라클보다 먼저 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.