服务器的配置虽说不咋样吧,好歹还能用。就是时不时的某些服务会崩掉,比如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个小时,如果发现服务失败就重启,定期查看一下日志文件就行了。

参考文章:
Linux使用脚本监控某个服务状态,并在服务启动失败时自动执行重启

最后修改:2024 年 08 月 06 日
如果觉得我的文章对你有用,请随意赞赏