Linux Shell脚本未启动服务

Linux Shell脚本未启动服务,linux,bash,shell,Linux,Bash,Shell,我有一个非常基本的shell脚本,用于检查给定的服务,然后查询该服务以确定该服务是否正在运行。如果服务未运行,它将尝试重新启动服务。但它不起作用。当我停止服务时。即使服务未运行,它也不会进入“if”部分。是退出状态“0”,我检查终端中的输出,不是“0”,但仍然不会进入“如果”部分。我错过了什么?谢谢你的帮助 #!/bin/bash #checking for apache service="sshd" whie [ 1 ] do ps -e | grep $service i

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

#!/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
这是一项复杂的业务,但也可以做得非常简单。在您的情况下,您所需要的只是一个脚本,以确保服务已启动并保持运行,这可以通过确定哪个命令
/etc/init.d/sshd
实际运行,然后将其插入此脚本来完成:

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

PS:As,您需要首先检查进程是否后台运行(在后台运行,立即返回)。如果是这样,您必须修改命令以避免出现这种情况。

您是复制并粘贴了脚本还是重新键入了脚本?避免重新键入,因为您可能会引入诸如
whie
之类的打字错误,从而混淆问题。检查apache或sshd?1
ps-e | grep$服务
不够健壮,无法检查服务是否正在运行。检查
服务$service status
的输出有什么问题?2. <代码>服务ssh start永远不会做任何事情。键入:
whie
应该是
while
。这是一个复制错误吗?不应该是
service$service start
?可能需要澄清的是,只有当命令不尝试自后台监控时,这才有效。顺便说一句,从中可以看出,所讨论的命令应该是
/usr/sbin/sshd-D-e
问题与
systemd
相关,而不是使用旧的SysV init脚本。作为补充说明,如问题中所述,如果存在阻止启动
sshd
的问题(例如,不正确的权限等),则会导致无休止的循环。在尝试启动服务(或启动init脚本)的次数或花费的时间上应该有一些合理的限制