【发布时间】:2019-02-11 03:55:32
【问题描述】:
我们有一个请求以顺序方式执行多个 shell 脚本(启动应用程序服务器的脚本)
真正的赌注是我们必须在继续执行下一个脚本之前验证进程(pid)是否启动。如果没有进程正在运行,则显示错误消息并继续下一个脚本
在完成执行(运行)所有脚本后,还发送一封带有错误(哪个脚本失败)的合并电子邮件
注意:这些服务不依赖于我们在每个脚本之后检查状态
以下是我想出的...请帮助
#!/bin/bash
./script1.sh
PID=`ps -ef | grep c3f | grep -v grep | awk '{print $2}' | wc -l`
if [ $PID -ne 0 ]; then
echo "error pls check";
fi
./script2.sh
PID1=`ps -ef | grep d3f | grep -v grep | awk '{print $2}' | wc -l`
if [ $PID1 -ne 0 ]; then
echo "error pls check";
fi
./script3.sh
PID2=`ps -ef | grep E3f | grep -v grep | awk '{print $2}' | wc -l`
if [ $PID2 -ne 0 ]; then
echo "error pls check";
fi
【问题讨论】:
-
使用合适的进程监控系统——runit、upstart、systemd等;任何这样的系统都可以让您定义启动后挂钩以检查服务是否真的正确运行,以及依赖关系,因此在其他名为dependent 的服务正确运行之前不会启动服务。不要使用 shell 脚本启动服务。
-
如果您使用的是现代 Ubuntu 或 Red Hat 发行版,请使用 systemd 启动您的服务。它比你可以编造的任何脚本都要强大和功能强大得多。你真的不想重新发明这个轮子。
-
当你说“完成所有脚本的执行之后”,你的意思是在它们都被启动之后,还是在它们都已经完成运行之后?
-
运行完@Jack之后