rc.local에서 호출된 스크립트는 첫 번째 명령이 아닌 두 번째 명령만 실행합니다.

rc.local에서 호출된 스크립트는 첫 번째 명령이 아닌 두 번째 명령만 실행합니다.

저는 LED를 제어하기 위해 Fadecandy와 함께 Raspberry Pi를 실행하고 있습니다. 모든 설정이 완료되었으며 Fadecandy 서버와 내보낸 처리 스케치가 시작 시 실행되기를 원합니다.

rc.local에서 다음 내용을 사용하여 startup.sh라는 스크립트를 호출합니다.

#! /bin/sh

/home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

두 번째 줄(fcserver)이 실행 중이고 서버가 정상적으로 시작됩니다. 첫 번째 줄(애플리케이션)은 전혀 실행되지 않는 것 같습니다.

그러나 터미널에서 스크립트(또는 rc.local)를 호출하면 두 줄이 모두 실행되고 애플리케이션이 시작됩니다.

오류가 발생하면 rc.local이 종료된다는 것을 알고 있지만 문제는 아닌 것 같습니다.두번째이 줄은 첫 번째 줄이 실행되지 않은 후에 실행됩니다.

내가 뭘 잘못했나요? 어떤 도움이라도 대단히 감사하겠습니다.

답변1

내 생각에는 fcserver가 데몬으로 실행되는 것 같습니다. 즉, 실행 중인 셸에서 분기하고 연결을 끊는 반면 로더는 그렇지 않습니다.

init에 의해 스크립트가 실행될 때 일어나는 일은 새 셸(귀하의 경우 /bin/sh)을 생성하고 해당 셸의 백그라운드에서 load 및 fcserver를 실행한 다음 ... 해당 셸을 파괴하는 것입니다. 이는 암시적으로 HUP를 보냅니다. 모든 하위 프로세스에 적용됩니다. FC서버는 데몬이기 때문에 살아남지만 로딩은 되지 않습니다.

로드 호출 전에 접두사를 추가해 볼 수 있습니다 nohup.

#! /bin/sh

nohup /home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

Raspberry Pi에서 nohup을 사용할 수 있는지 잘 모르겠습니다. 확인할 내용이 없습니다.

관련 정보