시스템 부팅시 왜 시작 서비스가 시작되지 않습니까?


37

이 질문 에 이어 헤드리스 Ubuntu Server 11.04 상자에 대한 간단한 시작 서비스 ( /etc/init/pms.conf )를 다음과 같이 작성했습니다.

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

명령 줄에서이 서비스를 마음대로 시작 (또는 중지) 할 수 있습니다.

service pms start

그리고 나는 그것이 실제로 실행되고 있음을 알 수 있습니다.

그러나 컴퓨터를 처음 부팅 할 때 서비스가 시작되지 않습니다. 상자에 SSH를 넣고 서비스 상태를 확인하면 다음과 같은 결과가 나타납니다.

$ service pms status
pms stop/waiting

내 질문은 왜 이런 일이 발생합니까? 부팅시 서비스가 시작되지 않는 이유는 무엇입니까?

업데이트 1 : 내 서비스가 시작되었는지, 나중에 죽었는지 또는 전혀 시작되지 않았는지 확실하지 않은 경우 PMS.sh에 다음을 추가했습니다.

echo "STARTED" > $STARTLOG

이것은 분명히 나에게 무언가 를 제공 합니다. 서비스를 직접 시작한 다음 start.log 를 확인하여 테스트했습니다 . 그런 다음 start.log 를 삭제 하고 재부팅했습니다. 다시 시작한 후에는 없었으므로 upstart가 내 서비스를 시작하지 않는 것처럼 보입니다. 나는 그것이 프로세스의 초기 단계에서 죽을 수 있다고 생각하지만, 그것이 모든 것의 단순성을 감안할 때 다소 가능성이없는 것 같습니다.

업데이트 2 : 방금 시작 업그레이드가 포함 된 11.10으로 업그레이드했지만이 문제가 계속 발생합니다.

업데이트 3 : 요청에 따라로 부팅했습니다 --debug. 고양이의 출력 /var/log/syslog | grep init이 너무 길어서 질문에 넣을 수 없지만 여기서 볼 수 있습니다 .

업데이트 4 : 더 많은 로그, 이번에는 upstart conf가 맨 위에 포함됩니다. 1실행하고 2를 실행하십시오 .


스크립트가 실행되지 않았습니까? pms 중지 / 대기 메시지는 가동 시작 작업이 실행되었고 모든 명령이 정상적으로 종료되었음을 의미합니다.
정렬

의 출력을 추가 cat /var/log/syslog | grep init로 지시하여 벼락 출세를 위해 부팅 loggging을 활성화 한 후 갑자기 출세 한 디버깅
인 Ciaran Liedeman을

@ Anarci : 내 질문에서 업데이트 3을 참조하십시오.
Kent Boogaart

대부분의 사용자는 오히려 같은 페이스트 빈 사이트에 대한 링크를 제공, 같은이 이메일 주소를 제공하지 않습니다 우분투 페이스트 빈
인 Ciaran Liedeman

@ Anarci : 완료-내 질문을 참조하십시오.
Kent Boogaart

답변:


19

예를 들어 사전 시작 / 사후 시작 항목을 사용하여 작업의 상세 정도를 높이는 것이 좋습니다.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

http://upstart.ubuntu.com/cookbook/ 에서 추가 정보

또한 http://upstart.ubuntu.com/wiki/Debugging을 살펴보십시오.


이것은 정말로 나의 머리를하고있다. 나는 당신의 포스트의 뒤에서 12 개의 다른 물건을 시험해 보았다. 로그에 다양한 불분명 한 메시지가 표시되어 모두 실패했습니다. 내 최근 시도는 init : pms main process (1329)가 143 상태로 종료되었습니다 . PMS.sh 가 처음 시작하는 것은 자체 로그에 기록하고 로그 항목이 없기 때문에 PMS.sh 가 시작되지 않았 음 을 수 있습니다 . 사전 시작 출력을 볼 수 있는데, 이는 대상 파일이 존재하고 실행 가능하다는 것을 알려줍니다. 나는 내일 다시 이것을 선택할 것이다. 그러나 당신이 어떤 아이디어를 가지고 있다면 나는 그것을 듣고 싶어요. 감사.
Kent Boogaart

@KentBoogaart 안녕하세요, 같은 문제가있는 것 같습니다. 해결책을 찾았습니까?
Daniele B

@KentBoogaart 나는 당신과 같은 문제가 있습니까? 너랑 운이 있니?
Mevin Babu

14

아마도 여기서 일어나고있는 일은 네트워크 어댑터가 나타나기 전에 그리고 심지어 루프백 어댑터 (lo)보다 먼저 pms가 시작되고 있다는 것입니다. PS3 Media Server에 대해 이야기하고 있다고 가정하면 네트워크 서비스이며 사용 가능한 인터페이스가없는 시작을 좋아하지 않을 것입니다.

시작 기준을 다음과 같이 변경하십시오.

start on filesystem and net-device-up IFACE!=lo

즉, "실제"네트워크 인터페이스가 가동 된 후에 시작하십시오. 그러나 eth0이 다음 인터페이스 인 경우 PMS가 시작되지만 PMS가 wlan0을 사용하도록하려는 경우에는 이상적이지 않을 수 있습니다. 서비스가 시작되지만 원하는 인터페이스를 선택하지 못할 수 있습니다. 스트리밍 할 인터페이스를 알고 있고 변경되지 않을 것이라고 가정하면 다음과 같이 작업에 하드 코딩합니다.

start on filesystem and net-device-up IFACE=wlan0

Oneiric (11.10)에서는 이벤트 static-network-up를 사용하여 정적으로 구성된 모든 장치를 기다릴 수 있습니다 . 인터페이스를 하드 코딩하지 않고 네트워크 종속 작업을 작성할 수 있기 때문에 좋습니다. [참고 : "정적으로 구성된 모든 장치"란 /etc/network/interfacesNetworkManager 대신 사용 하는 것을 말합니다 . 정적 IP와 DHCP의 의미에서 정적을 의미하지는 않습니다.]


이것은 트릭처럼 들리지만 작동하지 않았습니다. 나는 단지이 loeth0있지만 두 번째 제안을 사용 : start on filesystem and net-device-up IFACE=eth0. 재부팅 후에도 여전히 갈 수 없습니다. PMS 로그에서 리드가 될 수있는 것을 발견했습니다. 내가 조사하고
Kent Boogaart

흥미 롭군. 내가 언급하지 않은 한 가지는 원래 스크립트를 시도했으며 내 컴퓨터의 부팅시 작동한다는 것입니다. 나는 단지 추첨의 행운 (즉, 경쟁 조건, 좋은 차가 이겼고 당신의 것이 나쁜 차가 이겼다) 때문이라고 생각했다. 나는 우리가 여기서 어떤 다른 의존성을 놓치고 있는지 알 수 없습니다. 기묘한.
마크 러셀

2
부팅 후 시작할 수 있으므로 다른 서비스 종속성이 없어야합니다. 작동 할 수있는 하나의 더러운 해킹 (그러나 우리를 전혀 밝히지 않을 것임)은 sleep 10쉘 스크립트를 실행하기 전에 "시작 전 스크립트"에 그 이상을 넣는 것입니다.
마크 러셀

죄송합니다. Mark – 같은 페이지에 있습니다. 사전 시작 스크립트에서 이미 sleep 10을 시도했습니다. 안돼 그런 다음 debug.log를 모두 삭제하고 재부팅을 시도했습니다. 부팅 후 동일한 서비스 상태와 debug.log 파일이 없으므로 PMS가 실제로 실행되는 것을 확신하지 못합니다. 이것을 진단하는 쉬운 방법이 있습니까? PMS.sh를 변경하여 일부 출력을 추출하면 어디로 갈까요? 나는 항상 그것을 내 자신의 파일로 보낼 수 있다고 생각합니다.
Kent Boogaart

방금 질문을 더 많은 정보로 업데이트했습니다.
Kent Boogaart

3

syslog 검사에서 pms 프로세스는 오류없이 시작되지만 잠시 후 목표가 시작에서 중지로 변경되는 동안 종료됩니다.

repsawn 절을 추가했기 때문에 약간 이상하기 때문에 중지 된 후에 다시 시작해야하지만 절대 그렇게하지는 않습니다. 그래서 당신이 respawn 절을 제거했다고 생각합니다.

pms 서비스 시작과 중지 사이에는 ufw와 네트워크 인터페이스 (eth0)가 시작되고 udev-fallback-graphics가 1 개 시작됩니다.

pms 프로세스가 병렬로 시작되고있는 것 같습니다. 불행히도 시작 문서는 start on ...바닐라와 start on starting ...와 의 정확한 차이점에 대해 약간 흐릿합니다 start on started ....

시작 스탠자를 다음으로 변경하십시오.

start on started networking

아니면 그냥

start on net-device-up IFACE=eth0

net-device-up 이벤트가 훨씬 늦게 발생하지만 pms가 시작되기 때문에 로그 출력이 약간 이상합니다.

이렇게하면 모든 네트워킹 설정이 완료된 후에 만 프로세스가 시작되어야합니다. 즉, 작업이 시작되었을 뿐 아니라 완료된 것입니다.

또한 부트 프로세스 초기에 모든 파일에 대한 로그 출력이 항상 작동하는 것은 아닙니다. 로그 출력을 완전히 신뢰하지 마십시오. Upstart 디버깅 에서 답을보십시오


3

대신 실행 레벨에서 시작을 사용하여 유사한 문제를 해결하도록 관리했습니다.

start on runlevel [2345]

3

나는 같은 문제를 겪었고 결국 에는 다음과 같이 간단히 해결했습니다 .

start on runlevel [2345]

어떤없이 net-device-up또는 started networking물건

이것은 완전한 시작 스크립트이며 완벽하게 작동합니다.

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

나는 우연히 chkconfig내 RHCSA / CE 훈련 동안 :

sudo apt-get install chkconfig
sudo chkconfig pms on

기능에 대한 자세한 내용은 Oneiric 매뉴얼 페이지 를 확인할 수 있습니다 .


1

이에 대한 해결책을 찾았지만 이해하지 못합니다. 내가 밖으로 PMS를 이동하는 경우 /home/administrator와에 /bin/pms소유자로 루트로, 모두 잘 작동합니다.

내가 그대로 두 /home/administrator/었지만 루트가 /home/administrator/디렉토리 자체 의 모든 막대의 소유자인지 확인 하면 여전히 작동하지 않습니다.

관리자를 모든 소유자로 설정하고 스크립트의 관련 부분을 다음과 같이 변경하면

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

여전히 작동하지 않습니다.

나는 /home/root/이것을 완전히 이해하고 싶지만 지금은 디렉토리를 만들고 그곳으로 모든 것을 옮길 것이라고 생각합니다.


그래서 chkconfig작동하지 않았다? 디렉토리 PMS.sh를 루트에 제공하려고 했습니까 ? 솔루션 만 작동하면 Upstart의 런치 패드 페이지로 이동하여 개발자에게 직접 문의하십시오.
Oxwivi

그리고 이동 만해도 충분하다면 .sh모든 것을 그대로두고 해당 디렉토리를 가리 키도록 스크립트를 편집하십시오 (또는 디렉토리를 변경 하시겠습니까?).
Oxwivi

예, 루트가 소유 한 전체 PMS 디렉토리를 만들려고했습니다. / home / administrator /가 root가 소유하지 않았기 때문에 작동하지 않았을 것입니다.
Kent Boogaart

어쨌든 이해가되지 않습니다. 정기적으로 문제없이 upstart를 통해 / home 디렉토리에서 스크립트를 실행합니다.
주선

낯선 사람조차도 : / home / root / 아래의 모든 것을 시도했지만 루트가 분명히 소유했습니다. 작동하지 않았다. 나는 모든 것을 / bin / pms 아래로 옮기고 다시 작동했습니다. 따라서 / home 아래에서 PMS를 시작하려고 시도하는 것이 시스템에서 작동하지 않는 것 같습니다.
Kent Boogaart

1

스크립트가 집에있는 파일에 의존하고 표준 우분투 메커니즘 (.Private)으로 암호화되어 집에 액세스 할 수 없다는 것을 깨달았을 때 비슷한 "시작하지 않음"문제가 발생했습니다.

start on local-filesystems 이벤트는 아마도 암호 해독 프로세스가 종료되기 전에 생성됩니다.


1

홈 디렉토리가 NFS에 있습니까? 때때로 루트는 NFS에 액세스 할 수 없습니다.

기록을 위해, 지금 막 12.04에 대한 나의 작은 테스트에서 :

  • start on started networkingstart on network-interface-up INTERFACE=eth0 작동하지만하지 않습니다

  • start on started network-interface INTERFACE=eth0 그렇습니다.

항상 작업 네트워킹이 중지 된 것으로 표시 되는 http://os4.org/wiki/upstart.html 에 감사합니다 .initctl list


참조 된 링크가 끊어졌습니다.
slm


0

@xuhcc와 마찬가지로 Vagrant Upstart 스크립트가 실행되지 않은 이유를 찾기 위해 여기에 왔습니다. 다음과 같이 작동합니다.

방랑 제로 시작하다

그러나 다음 버그로 인해 일부 빌드에는 없습니다.

https://github.com/mitchellh/vagrant/issues/6074

보고서에 나열된 해결 방법은 저에게 효과적이었습니다.

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

나를 위해 위대한 일


0

그것은 나를 위해 일했습니다 (iface를 시작한 후에 서비스를 시작해야합니다).

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

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