服务器的配置虽说不咋样吧,好歹还能用。就是时不时的某些服务会崩掉,比如elasticsearch。没了它,MediaWiki的搜素功能就是个摆设,输入任何东西都不会返回结果,只会告知出现问题了。
那就想办法用脚本检测服务状态并重启,然后再使用计划任务功能定期执行一下,毕竟我也不是随时随地会去关注服务状态。
其实这已经不是我第一次进行这种操作了,只是以前是在宝塔面板中(参见《定时监测MySQL进程,终止后自动重启》一文),操作相对会简单一点。
脚本内容参考网上的,具体如下:
#!/bin/bash
# 设置日志文件路径
log_file="$(dirname "$0")/elasticsearch_restart.log"
while true; do
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 获取elasticsearch服务的状态
service_status=$(systemctl status elasticsearch | grep "Active:")
# 检查服务状态
if [[ $service_status == *"failed"* ]]; then
echo "$current_time - 服务状态为failed,执行重启操作..."
systemctl restart elasticsearch
echo "$current_time - 服务已重启" >> "$log_file"
elif [[ $service_status == *"active (running)"* ]]; then
echo "$current_time - 服务正常,无需重启"
echo "$current_time - 服务正常,无需重启" >> "$log_file"
break # 服务正常时退出循环
else
echo "$current_time - 无法确定服务状态"
echo "$current_time - 无法确定服务状态" >> "$log_file"
fi
sleep 60
done
将脚本保存后,记得修改权限,否则无法运行。
chmod 711 elastic_restart.sh
尝试执行一下脚本,屏幕输出“服务正常,无需重启”。
在控制台中输入crontab -e
,配置计划任务。
0 */12 * * * /root/sh/elastic_restart.sh
脚本的运行周期为12个小时,如果发现服务失败就重启,定期查看一下日志文件就行了。
2 条评论
用cronicle集中管理脚本
脚本不多的话感觉没必要再多个工具。但还是得谢谢提醒,没准哪天就用上了。