如何使用shell脚本连接到linux服务器并停止/启动服务?

如何使用shell脚本连接到linux服务器并停止/启动服务?,linux,shell,Linux,Shell,我想设置一个脚本,该脚本将连接到linux服务器,然后停止/启动服务。但在服务停止和启动之间,应等待约10秒,并检查服务是否真的停止 service httpd stop --wait 10 seconds. check ps -ef | grep httpd, kill if any hanged processes service httpd start 有人能帮我一下吗?等待命令的用途不同,我们需要使用sleep命令 查看此链接以了解详细的差异。 用于检查进程是否正在运行的脚本 #!/

我想设置一个脚本,该脚本将连接到linux服务器,然后停止/启动服务。但在服务停止和启动之间,应等待约10秒,并检查服务是否真的停止

service httpd stop
--wait 10 seconds. check ps -ef | grep httpd, kill if any hanged processes
service httpd start
有人能帮我一下吗?

等待命令的用途不同,我们需要使用sleep命令

查看此链接以了解详细的差异。

用于检查进程是否正在运行的脚本

#!/bin/bash
UP=$(pgrep httpd | wc -l);
if [ "$UP" -ne 1 ];
then
        echo "httpd is down.";
else
        echo "All is well.";
fi
您的最终代码是

#!/bin/bash

service httpd stop 

sleep 10 

UP=$(pgrep httpd | wc -l);
if [ "$UP" -ne 1 ];
then
  service httpd start  #start serivce again, since no process are found 
else
  echo "Service is not stopped yet.";
  killall -15 httpd  #Kills all processes related to httpd
  service httpd start #start httpd process
fi

使用sleep和kill-9代替显式检查。我可以使用用户名和密码连接到服务器吗?我正在检查表单,但大多数表单都说创建ssh密钥。我将在我想要运行命令的同一台服务器上部署这个shell脚本。您当然可以将ssh服务器配置为接受密码。但这并不推荐,因为它比密钥更不安全。你只能用一种互动的方式,所以不能用脚本。至少你不应该这样。我正在尝试睡眠,但我得到了这个错误睡眠:无效的时间间隔'10\r',你能告诉我如何解决这个问题吗。这就是我在脚本中添加的内容:显然,您需要指定要终止的进程。如果不确定命令的用法,请阅读尝试使用的命令的手册页。比如杀人。在您的例子中,killall-9/usr/sbin/httpd可能是一个很好的替代方案,因为它不需要特定的进程id。不需要这种复杂性。为什么还要费心去检查是否还有一个过程,不管怎样,你都会很难杀死它。只需在不检查的情况下发射一个killall-9,您就知道一切正常。@arkascha,进程应该优雅地停止。我们应该允许他们在终止之前执行清理例程,例如删除锁定文件、将内存中的数据刷新到硬盘驱动器等。然后执行killall-15或简单地killall而不是killall-9。“这不是我的意思。”阿卡斯卡,发送信号有什么问题吗?它是用来处理的,而SIGKILL不能由进程来处理。@SaiAvinash为了将java应用程序作为服务运行,您需要遵循以下步骤,或者这里有一个简单的解决方案来实现您想要实现的目标