当编写Shell脚本来监控服务的运行状态时,可以使用如下的脚本代码:
#!/bin/bash
# 获取进程ID
PID=$(ps -ef | grep Watcher-1.0-SNAPSHOT.jar | grep -v grep | awk '{print $2}')
APP_NAME=Watcher-1.0-SNAPSHOT.jar
# 判断进程是否存在
if [[ -z $PID ]]; then
echo "Watcher-1.0-SNAPSHOT.jar is not running."
# 如果进程不存在,则启动服务
nohup java -jar -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError $APP_NAME &
echo "Watcher-1.0-SNAPSHOT.jar Starting"
else
echo "Watcher-1.0-SNAPSHOT.jar is running."
fi
这段脚本的功能是检测服务的运行状态,如果服务未在运行,则会启动服务。现在让我们来详细解释每个步骤:
- 获取进程ID:通过
ps
命令结合grep
指令来查找运行中的服务进程,并使用awk
指令获取进程ID。 - 设置服务名称:将服务的名称赋值给变量
APP_NAME
,以便后续使用。 - 判断进程是否存在:使用
-z
选项判断进程ID是否为空,即服务是否在运行中。如果进程ID为空,则说明服务未在运行。 - 启动服务:如果服务未在运行中,则使用
nohup
命令启动Java服务,并加上一些Java虚拟机的配置,如初始化堆大小和最大堆大小,并在内存不足时导出堆转储文件。 - 输出提示信息:无论服务是否启动,都会输出相应的提示信息。
加入crontab每十分钟检查一次:
*/10 * * * * /bin/bash /home/services/watcher/monitor.sh >> /home/services/watcher/nohup.out 2>&1
请注意,你可以根据实际需求对脚本进行修改。此脚本仅提供了一个示例,你可以根据自己的具体情况进行调整:
- Watcher-1.0-SNAPSHOT.jar,不要直接复制,这是我自己本地的jar包,你需要把它全部替换成自己的jar包名。
- 启动命令根据自己想法或者公司要求进行修改或替换。
- crontab根据自己实际情况修改文件地址。
希望这篇博客能对你有所帮助!若有其他问题,欢迎继续咨询,祝您生活愉快。