init.d에 스크립트를 추가할 수 없습니다.

init.d에 스크립트를 추가할 수 없습니다.

원격 우분투 서버에 gerrit를 설치했습니다. 이제 서버가 다시 시작될 때 자동으로 시작되기를 원합니다. 나는 이것을 따르려고 노력하고 있습니다 :

http://gerrit-documentation.googlecode.com/svn/Documentation/2.3/install.html#rc_d

이것은 두 줄입니다:

sudo ln -snf `pwd`/home/gerrit2/gerrit_application/bin/gerrit.sh /etc/init.d/gerrit.sh
sudo ln -snf ../init.d/gerrit.sh /etc/rc3.d/S90gerrit

두 파일이 모두 생성되었음을 확인했습니다. 하지만 응용 프로그램을 다시 시작하면 시작되지 않습니다. 여전히 수동으로 시작해야 합니다.

root@mm11:/home/gerrit2/gerrit_application/bin# ./gerrit.sh start

이 문제를 어떻게 디버그/수정할 수 있나요?

나는 또한 다음을 시도했습니다.

sudo ln -snf /home/gerrit2/gerrit_application/bin/gerrit.sh /etc/init.d/gerrit
sudo update-rc.d gerrit defaults

이것은 만든다:

root@mm11:/home/gerrit2# update-rc.d gerrit defaults
 Adding system startup for /etc/init.d/gerrit ...
   /etc/rc0.d/K20gerrit -> ../init.d/gerrit
   /etc/rc1.d/K20gerrit -> ../init.d/gerrit
   /etc/rc6.d/K20gerrit -> ../init.d/gerrit
   /etc/rc2.d/S20gerrit -> ../init.d/gerrit
   /etc/rc3.d/S20gerrit -> ../init.d/gerrit
   /etc/rc4.d/S20gerrit -> ../init.d/gerrit
   /etc/rc5.d/S20gerrit -> ../init.d/gerrit

답변1

먼저 스크립트를 스크립트 풀에 복사해야 합니다.

/etc/init.d/

Linux에는 다양한 실행 수준에서 풀에 대한 링크 집합을 포함하는 디렉터리 집합이 있습니다.

/etc/rc0.d # for runlevel 0 for trun off system in all of dirstos
/etc/rc1.d # runlevel 1, for single user in all distros
/etc/rc2.d # runlevel 2 , default runlevel for debian-base dirstros
/etc/rc3.d # runlevel 3, in redhat-base systems, using for everything without graphical mode
/etc/rc4.d # runlevel 4,reserved by system
/etc/rc5.d  #runlevel 5 , in  Redhat base , defualt runlevel
/etc/rc6.d  # for runlevel 6 for reboot system in all of distros

다음을 실행해야 합니다:

ln -s /etc/init.d/YOUR_SCRIPT /etc/rcNUMBER.d/{S OR K}NUMYOUR_SCRIPT

예를 들어:

ln -s /etc/init.d/apache2 /etc/rc2.d/S99apache2

S OR K : S statrt, K: Kill
NUM before script: priority of run, if you have two scrip such S10squid amd S99apache, At first squid will be run then apache. 

update-rc.d비교 chkconfig:

update-rc.dDebian-base시스템 내에서 작업하고 시스템 chkconfig내에서 작업하십시오 redhat-base.

답변2

rc3.d런레벨 3에서 시작되는 서비스에 대한 디렉터리인 디렉터리의 스크립트에 연결됩니다 . 우분투의 기본 런레벨은 2 IIRC입니다. 따라서 두 번째 줄을 다음과 같이 변경할 수 있습니다.

sudo ln -snf ../init.d/gerrit.sh /etc/rc2.d/S90gerrit

물론 서버가 다른 런레벨에서 시작되도록 구성되었을 수도 있습니다. 현재 런레벨을 알아보세요

who -r

답변3

먼저 루트로 스크립트를 수동으로 실행해 보십시오(시스템을 재부팅하지 않고).

 /etc/init.d/gerrit start

이것이 작동하지만 시작 시 여전히 서비스가 시작되지 않으면 스크립트를 실행하려고 할 때 PATH 변수가 예상한 것과 다를 수 있다는 문제일 수 있습니다. 스크립트에서 PATH를 합리적인 기본값으로 설정해 보십시오( gerrit.sh).

예를 들어

#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin

#...

관련 정보