服务器主机会出现断电,和其他jar包服务进程被杀死的情况,写个shell脚本 定时监控它们。
当然,断电重启的时候有些命令设置开机重启
再写个心跳相关的接口 监控主机服务 和摄像头状态~
ps aux | grep 进程名 | grep -v grep
:进程存在则输出信息,不存在则没输出
ps -ef | grep 进程名 | grep -v grep | wc -l
:进程存在则输出行数(也就是数量),不存在则输出0
#!/bin/bash
# 指定要检测的端口号 zlmeida
PORT_TO_CHECK=8082
# 关联JAR包名称和相应的启动命令
declare -A JAR_COMMANDS=(
["wvp-pro-assist.jar"]="/usr/bin/java -jar /opt/app/assist/wvp-pro-assist.jar --spring.config.location=/opt/app/assist/application-prod.yml"
["wvp-pro.jar"]="/usr/bin/java -jar /opt/app/pro/wvp-pro.jar --spring.config.location=/opt/app/pro/application-prod.yml"
)
# 检测端口是否被占用
if lsof -Pi :$PORT_TO_CHECK -sTCP:LISTEN -t > /dev/null; then
echo "Port $PORT_TO_CHECK is already in use. Cannot proceed."
else
/opt/app/ZLMediaKit/release/linux/Debug/MediaServer -d &
fi
# 遍历所有JAR包
for JAR_NAME in "${!JAR_COMMANDS[@]}"
do
# 检查Java进程是否在运行
if pgrep -f "$JAR_NAME" > /dev/null
then
echo "$JAR_NAME is running."
else
echo "$JAR_NAME is not running. Restarting..."
# 获取对应JAR包的启动命令
COMMAND="${JAR_COMMANDS[$JAR_NAME]}"
# 执行启动命令
eval "$COMMAND"
# 你也可以选择发送通知、记录日志等其他操作
fi
done
赋予权限:chmod 777 look_jar.sh
执行脚本: ./look_jar.sh
运行结果:
个错误通常是由于脚本文件的换行符格式不正确导致的。在Windows系统中,换行符是 \r\n(回车和换行),而在Unix/Linux系统中,是 \n(换行)。
在你的情况下,看起来脚本文件 look_jar.sh 是在Windows系统中创建的,因此包含了Windows风格的换行符。在Linux系统下执行脚本时,可能会导致解释器无法正确识别。
你可以使用 dos2unix 工具来将文件转换为Unix风格的换行符。如果系统上没有安装 dos2unix,你可以使用 sed 命令进行转换。以下是一个示例:
sed -i 's/\r$//' look_jar.sh
kill 进程号(PID):
ps -ef | grep look_jar.sh
kill <pid>
# u代表所有者,x代表执行权限,+表示增加权限
chmod u+x look_jar.sh
chmod u+x look_jar.log
#配置系统定时任务命令
crontab -e
#写入需要执行的脚本,每1小时运行一次(cron表达式)
0 */1 * * * /opt/app/look_jar.sh >> /opt/app/look_jar.log
#把脚本的错误重定向到定向到日志文件
*/1 * * * * /opt/app/look_jar.sh >> /opt/app/look_jar.log 2>&1
#重启系统定时任务(才会生效)
service crond restart
#或者
systemctl restart crond.service
#或者
sudo systemctl restart cron
测试的时候可以把脚本周期设置短一点,用来测试
*/5 * * * * /opt/app/look_jar.sh >> /opt/app/look_jar.log