start-stop-daemon은 프로세스 실패에도 불구하고 항상 "0"을 반환합니다.

start-stop-daemon은 프로세스 실패에도 불구하고 항상 "0"을 반환합니다.

나는초기화 스크립트작업 시작노드 js데몬 프로세스로. 문제는 실행할 때 start-stop-daemonnodejs-daemon이 어떤 오류를 반환하더라도 항상 "0"을 반환한다는 것입니다.

스위치를 사용할 때 이 문제가 start-stop-daemon발생하는 것을 발견했습니다 --background.

스위치 부착, start-stop-daemonnodejs-daemon이 실패하더라도 항상 "0"을 반환합니다.

root# start-stop-daemon --start --chuid $GHOST_USER:$GHOST_GROUP --chdir $GHOST_ROOT --make-pidfile --pidfile $PIDFILE --exec $DAEMON  --background -- $DAEMON_ARGS ; echo ---error: $?
---error: 0

데몬은 자동으로 실패하며 현재 실행되고 있지 않습니다.

스위치 없이, 우리는 실제로 할 수 있습니다바라보다데몬 프로세스를 시작할 수 없습니다.

root# start-stop-daemon --start --chuid $GHOST_USER:$GHOST_GROUP --chdir $GHOST_ROOT --make-pidfile --pidfile $PIDFILE --exec $DAEMON  -- $DAEMON_ARGS ; echo ---error: $?
ERROR: Unsupported version of Node
Ghost needs Node version ~0.10.0 || ~0.12.0 || ^4.2.0 you are using version 5.10.0

Please see http://support.ghost.org/supported-node-versions/ for more information
---error: 231

--background이제 저는 해당 스위치를 사용하여 nodejs 데몬을 시작하지 못할 때 "0"보다 큰 오류 코드를 얻을 수 있는 솔루션을 찾고 있습니다 .

답변1

이는 문서화된 동작입니다. 포그라운드 프로세스는 백그라운드 프로세스를 포크한 후에 완료됩니다. 매뉴얼 페이지에서:

-b, --background
          Typically used with programs that don't detach on their own. This option will force start-stop-daemon to fork before starting the process, and  force
          it  into  the  background.   Warning:  start-stop-daemon  cannot check the exit status if the process fails to execute for any reason. This is a last
          resort, and is only meant for programs that either make no sense forking on their own, or where it's not feasible to add the code for them to do this
          themselves.

답변2

파일 시스템에 문제가 발생한 후 일부 mongo 파일이 결국 루트의 소유가 된 것을 발견했습니다. 이 특정 문제의 경우 로그 파일입니다. db/journal 디렉터리에서 chown mongodb:mongodb *를 사용하여 이러한 모든 항목을 다시 mongodb:mongodb로 변경합니다. db 디렉터리에 있는 mongod.lock 파일을 삭제하는 것도 중요합니다. 또한 조금 이상한 점은 start_stop_deamon에서 --Background 옵션을 제거하면 작동하지만 물론 백그라운드에서 실행되기를 원한다는 것입니다.

관련 정보