如何使用 shell 脚本连接到 linux 服务器并停止/启动服务?
Posted
技术标签:
【中文标题】如何使用 shell 脚本连接到 linux 服务器并停止/启动服务?【英文标题】:How to connect to a linux server and stop/start a service using a shell script? 【发布时间】:2017-11-18 09:35:14 【问题描述】:我想设置一个脚本,该脚本将连接到 linux 服务器,然后停止/启动服务。但是在服务停止和启动之间,它应该等待大约 10 秒,然后检查服务是否真的停止了。
service httpd stop
--wait 10 seconds. check ps -ef | grep httpd, kill if any hanged processes
service httpd start
有人可以帮我看看怎么做吗?
【问题讨论】:
使用sleep
和kill -9
而不是显式检查。
我可以使用用户名和密码连接到服务器吗?我正在检查表格,但大多数人说创建一个 ssh 密钥。我将在我想运行命令的同一台服务器上部署这个 shell 脚本
您当然可以将 ssh 服务器配置为接受密码。但不建议这样做,因为它比密钥更不安全。而且您只能以交互方式执行此操作,因此不能使用脚本。至少你不应该。
我正在尝试睡眠,但出现此错误 sleep: invalid time interval `10\r',你能告诉我如何解决这个问题吗?这是我在脚本中添加的内容:sleep 10
您显然需要指定要杀死的什么进程。如果您不确定它们的用法,请阅读您尝试使用的命令的手册页。例如man kill
。在您的情况下,killall -9 /usr/sbin/httpd
可能是一个不错的选择,因为它不需要特定的进程 ID。
【参考方案1】:
wait
命令用于不同的目的,我们需要使用sleep
命令代替。
查看此链接了解详细差异。 https://***.com/a/13296927/3086531
检查进程是否正在运行的脚本
#!/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
【讨论】:
不需要这种复杂性。为什么还要检查是否还有一个进程,无论如何你都会硬杀它。无需检查即可触发killall -9
,您就知道一切都很好。
@arkascha,应该优雅地停止进程。我们应该允许他们在终止之前执行清理程序(例如删除锁定文件、将内存中的数据刷新到硬盘等)。
然后用killall -15
(或简单的killall
)代替killall -9
。那不是我的意思。
@arkascha,发送信号 15 (SIGTERM) 有什么问题?它是要被处理的,而 SIGKILL 不能被进程处理。
@SaiAvinash 为了将 java 应用程序作为服务运行,您需要在此处执行此过程***.com/a/11203626/3086531 或者这是您想要实现的简单解决方案***.com/a/11203634/3086531以上是关于如何使用 shell 脚本连接到 linux 服务器并停止/启动服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何从windows平台自动连接到Linux/Mac机运行shell脚本?
使用jsch连接到linux上,然后执行shell命令,返回的结果中存在乱码,各位大大怎么解决?
Linux Shell 脚本:将命令输出保存在变量/文件中?