运行状态时初始化脚本是否总是返回正确的退出代码?

运行状态时初始化脚本是否总是返回正确的退出代码?

我正在尝试编写一个 cron 作业脚本,该脚本将检查我的服务是否正在运行,如果没有运行则重新启动它们,这样我就不必手动执行此操作。

现在,我在网上查找了如何在 bash 脚本中检查服务的状态,基本上发现了以下内容,但有一些变化:

ps auxw | grep <service_name> | grep -v grep

if [[ $? != 0 ]]; then
        /etc/init.d/<service_name> start
fi

我做了一些思考,认为这可能不那么麻烦,而是一种使用 init 脚本的一般功能来检查它的方法:

/etc/init.d/<service_name> status

if [[ $? != 0 ]]; then
    /etc/init.d/<service_name> start
fi

如果我错了,请纠正我,但这不是总是有效吗?这是 init 脚本的一般属性吗?它们返回退出代码?提前致谢。 :)

答案1

不是100%的时间。然而,这是一个非常好的衡量标准。

CFEngine 3 在“服务承诺”中使用它来检查服务是否正在运行。如果 的退出代码/etc/init.d/<servicename> status为零,则假定该服务正在运行。

我刚刚遇到 BitBucket 不遵守此约定的情况:/etc/init.d/atlbitbucket status即使未运行也返回 0。但是,我认为这是 init 脚本中的不良行为(错误),它不遵循约定。


找到了它的参考;这Linux 标准基本规范状态:

如果请求状态操作,初始化脚本将返回以下退出状态代码。

0         program is running or service is OK
1         program is dead and /var/run pid file exists
2         program is dead and /var/lock lock file exists
3         program is not running
4         program or service status is unknown
5-99      reserved for future LSB use
100-149   reserved for distribution use
150-199   reserved for application use
200-254   reserved

所以是的,合规的可以指望应用程序以这种方式运行。

相关内容