首页 > 解决方案 > Shell 脚本未启动服务

问题描述

我有一个非常基本的 shell 脚本来检查给定的服务,然后查询服务以查明服务是否正在运行。如果服务未运行,它会尝试重新启动服务。但它不起作用。当我停止服务时。即使服务没有运行,它也永远不会进入“if”部分。退出状态是“0”吗?我检查终端中的输出,不是“0”,但仍然不会进入“if”部分。我错过了什么?任何帮助表示赞赏

#!/bin/bash
#checking for apache

service="sshd"

whie [ 1 ]
do
    ps -e | grep $service
    if [ $? -ne 0 ]; then
        service ssh start
    fi
    sleep 3
done

标签: linuxbashshell

解决方案


流程管理是一项复杂的业务,但也可以做得非常简单。在您的情况下,您只需要一个脚本来确保服务已启动并继续运行,这可以通过确定/etc/init.d/sshd实际运行的命令然后将其插入此脚本来完成:

while true
do
    [command from /etc/init.d/sshd]
done

PS:正如@CharlesDuffy 指出的那样,您首先要检查进程是否守护进程(在后台运行,立即返回)。如果是这样,您将不得不修改命令,以免发生这种情况。


推荐阅读