为什么在出现错误时要在 Upstart 脚本中使用“stop; exit 1”而不是仅仅使用“exit 1”?

为什么在出现错误时要在 Upstart 脚本中使用“stop; exit 1”而不是仅仅使用“exit 1”?

我正在维护一个 Upstart 脚本(版本 0.6.5),其中pre-start script有一个测试,如果先决条件不满足则终止服务:

pre-start script
  if [ ! -f $REQUIRED_FILE ]; then
    echo "$REQUIRED_FILE does not exit" >> $LOG_FILE
    stop 
    exit 1
  fi
end script

根据csh/tcsh参考文档,stop [jobIDs]

暂停当前​​后台作业或者由 jobID 指定的后台作业;这是 Ctrl-Z 或 suspend 的补充。

我认为stop这里没有任何用处,特别是在pre-start服务尚未启动的部分(即通过exec节)。

我是不是漏掉了什么?还是说stop这里的内容是多余的、不必要的?

答案1

在作业内部使用stop相当于调用sudo stop <job-name>。如果你想禁用respawn作业的 -ing,则可以使用此方法。

关于预启动节的 upstart 文档有一个示例,解释了这种用法:

http://upstart.ubuntu.com/cookbook/#pre-start

另一种可能性是出于某种原因取消作业的启动。一个很好的理由是从系统配置中可以清楚地看出不需要服务:

pre-start script
  if ! grep -q 'parent=foo' /etc/bar.conf ; then
    stop ; exit 0
  fi
end script

相关内容