尽管进程失败,start-stop-daemon 始终返回“0”

尽管进程失败,start-stop-daemon 始终返回“0”

我正在尝试获得一个初始化脚本开始运行节点js作为守护进程。问题是,当我执行start-stop-daemon它时,它总是返回“0”,无论 nodejs-daemon 可能返回什么错误。

我发现这个问题是在使用开关时出现start-stop-daemon--background

带开关start-stop-daemon即使 nodejs-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

这是有记录的行为。前台进程在 fork 后台进程后完成。从手册页:

-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 文件最终归 root 所有。对于这个特定问题,它是日志文件。使用 db/journal 目录中的 chown mongodb:mongodb * 将所有这些更改回 mongodb:mongodb。同样重要的是删除 db 目录中的 mongod.lock 文件。还有一点奇怪的是,删除 start_stop_deamon 中的 --background 选项是有效的,但当然你希望它在后台运行

相关内容