利用脚本对Seafile服务器进行监控
架了一台Seafile服务器,不知道是不是非专业版的原因,Seahub服务经常随机的Down掉,导致用户无法访问Seafile。翻了很久Seafile的日志和系统日志,没有任何收获,也试过升级到最新版本,都没有能解决问题。难道只能买专业版?记得以前在官网看过,还挺贵的…
某天突然想到阿里云和DNSPod的所谓的主机监控好象就是监测主机的HTTP Code,通过获得HTTP Code号码来对主机服务进行监控的。所以也可以利用这样的方法来监控Seafile服务器了,当发现服务Down掉了之后,直接重启就可以了。
脚本如下:
#!/bin/bash # 使用curl对Seafile的Seahub服务获取HTTP Code,设置连接时间和最大时间不超过5秒。 seafile_http_code=`/usr/bin/curl --connect-timeout 5 --max-time 5 -s -w %{http_code} "http://SeafileServerIP:8000" >> 2>/dev/null` # 获取当前时间 current_time=`/usr/bin/date "+%Y-%m-%d %H:%M:%S"` # 如果HTTP Code是302的话,就是正常的,因为打开Seafile页面之后,会有一个跳转的。 if [ $seafile_http_code = 302 ] then echo '['$current_time'] : '$seafile_http_code'. The Seafile Server is running...' >> /var/monitor_seafile/monitor_seafile.log else # 如果不是302,就是有问题的。直接用脚本重启Seahub服务。 echo '['$current_time'] : '$seafile_http_code'. The Seafile Server has crashed!!!' >> /var/monitor_seafile/monitor_seafile.log /var/seafiledir/seafile-server-latest/seahub.sh restart >> /var/monitor_seafile/monitor_seafile.log current_time=`/usr/bin/date "+%Y-%m-%d %H:%M:%S"` seafile_http_code=`/usr/bin/curl --connect-timeout 5 --max-time 5 -s -w %{http_code} "http://SeafileServerIP:8000" 2>/dev/null` echo '['$current_time'] Restart Seafile service is OK!' >> /var/monitor_seafile/monitor_seafile.log echo '['$current_time'] : '$seafile_http_code'. The Seafile Server is running...' >> /var/monitor_seafile/monitor_seafile.log fi
然后把这个脚本放到Crontab里面去循环执行就好了。为了保证Seafile服务的持续有效,设为5分钟执行一次。
crontab -l */5 * * * * /bin/bash /var/monitor_seafile/monitor_seafile.sh