最MC论坛

标题: 你想拥有高大上的自动重启脚本吗!他不仅可以帮你重启!当服务器崩溃他会报警(emal) [打印本页]

作者: 1748011755    时间: 2016-4-9 19:57
标题: 你想拥有高大上的自动重启脚本吗!他不仅可以帮你重启!当服务器崩溃他会报警(emal)
本帖最后由 1748011755 于 2016-4-10 01:45 编辑

大家好!今天已经不是我第一次发言了!之前我也发过一些帖子!全部是教程!


序幕:
请看我第一个帖子 http://www.zuimc.com/thread-37414-1-1.html
在里面有更多教程!

正文开始:


我不得不说的话

这个脚本我不介意使用在生存类型的服务器上!他会丢失玩家数据!如果你设置合理!也没有什么不可能的!设置服务端重启时间 尽量为夜晚,玩家少的时候


你有没有听说过,什么叫做EMAIL? 他可以干什么!如果你有QQ邮箱!这个脚本会适合你!但是你不一定完全能够驾驭的了他!
因为,这个脚本包含了很多功能!它类似于监控!会时时刻刻监控你的MC服务端是否正在运行!如果MC服务端崩溃,或者意外停止!而你在外面!玩家急着等你回家开服!那么!这个脚本会帮你启动服务端!是的,你也许会说,这不就是自动重启吗!我想说 不,这不是简简单单的自动重启!这是脚本其中的一个小小的功能!   看下面(这个脚本必备环境):
环境:


功能:
先来几张这个脚本监控图片

这个脚本已经运行一段时间了!
[attach]10120[/attach]

如果MC服务突然停止,脚本会怎么做?
我制造了一系列MC服务意外停止的状况!
[attach]10121[/attach]

来看看我的监控脚本如何解决!
[attach]10122[/attach]

我设置好邮件服务器后!当mc服务停止后,监控系统会这样做(给我发邮件)
[attach]10123[/attach]
我们看看邮件内容
[attach]10124[/attach]

脚本出现问题!不过已经解决!(重启成功不发邮件提示-已经解决)
[attach]10125[/attach]

[attach]10126[/attach]


以上便是脚本的流程!如果喜欢!可以拿走!不允许转载哦! 原创




1.接下来!教你如何搭建mailx服务!
  1. 其实你没有必要去安装这个服务!执行我这个脚本!如果你没有安装,脚本自动安装!
复制代码
2.然后输入SSH指令!运行完成后!你可以停止运行了!
  1. sh date_kill
复制代码
3.然后执行这几个指令  echo 'set from=自己的邮箱@qq.com smtp=邮箱服务器'&>>/etc/mail.rc
  1. echo 'set from=你的QQ邮箱 smtp=smtp.qq.com'&>>/etc/mail.rc
复制代码
4.然后就是和密码相关
  1. echo ' set smtp-auth-user=你的QQ邮箱 smtp-auth-password=你的QQ邮箱独立密码'&>>/etc/mail.rc
复制代码
5.登陆你的QQ邮箱
https://mail.qq.com/   

6.设置smtp服务开启
[attach]10127[/attach]

[attach]10128[/attach]

[attach]10129[/attach]



















  1. #!/bin/bash
  2. H="2"
  3. #设置时间 时   自动重启服务器
  4. F="2"
  5. #设置时间 分        自动重启服务器
  6. #这个会丢失玩家数据!尽量设置晚上!没人玩的时候!
  7. mc="PaperSpigot-1.8.7-R0.1-SNAPSHOT-latest.jar"
  8. #你服务器核心文件!不能有错误!如果你不懂核心!你不要往下看了!不适合你!
  9. server_mc="登入服"
  10. #你服务器名称

  11. user_email=(
  12.         1111111111@qq.com
  13.         2222222222@qq.com
  14.         #发送邮件! 收件人地址  一行一个!注意格式
  15. )
  16. ###############################################################################################
  17. #
  18. #                下面的东西不要修改!你不懂就不要改!发生任何损失我概不负责!
  19. #                如果你没有能力解决!我也不会帮你! 我们服务器IP地址: play.mcshsz.net  版本1.8.0-1.8.7
  20. ###############################################################################################
  21. function DATE_M(){
  22.         local DATE_M=`date +%M`
  23.         #分
  24.         return ${DATE_M}
  25. }
  26. function DATE_S(){
  27.         local DATE_S=`date +%S`
  28.         #秒
  29.         return ${DATE_S}
  30. }
  31. function DATE_K(){
  32.         local DATE_K=`date +%k`
  33.         #小时
  34.         return ${DATE_K}
  35. }
  36. function DATE_U(){
  37.         local DATE_U=`date +%u`
  38.         #第几周
  39.         return ${DATE_U}
  40. }
  41. function pid_mc(){
  42.         ps -ef | grep -v grep | grep $mc &>>/dev/null
  43.         if [ $? = 0 ];then
  44.                 pid=`ps -ef|grep $mc | grep -v grep|cut -c 9-15`
  45.                 dpid=`ps -ef | grep $mc | grep -v grep | cut -c 16-20`
  46.                 echo "成功捕获MCPID :root  $pid - $dpid"
  47.                 return 0
  48.         else        
  49.                 echo "捕获MCPID失败"
  50.                 return 1
  51.         fi
  52. }
  53. function INSTALL_email(){
  54.         #安装一些本程序需要的包!
  55.         rpm -qa | grep mailx &>>/dev/null
  56.         if [ $? != 0 ];then
  57.                 echo "正在安装mailx"
  58.                 yum -y install mailx &>>/dev/null
  59.                 if [ $? != 0 ];then
  60.                         echo "安装mailx失败!请手动解决!"
  61.                         exit 25
  62.                 fi
  63.         fi
  64. }
  65. function rm_rf(){
  66.         #清除邮件文件
  67.         local email_wj="err_mc.log mc_access.log"
  68.         rm -rf ./log/$email_wj
  69. }
  70. function email_url(){
  71.         #发送邮件!
  72.         #${telet_email}  标题
  73.         #${user_email}   收件人地址
  74.         #${url_email}    发送邮件文件路径!
  75.         #
  76.         #
  77.         #                        标题                收件人地址                发送邮件文件路径!
  78.         echo ${url_email} | mail -s "${telet_email}" ${i}
  79. }
  80. function kill_mc(){
  81.         #local pid=`cat ./mc.pid`
  82.         kill  -9 $dpid &>>/dev/null
  83.         sleep 3
  84.         kill  -9 $pid &>>/dev/null
  85. }
  86. function whith_mc(){
  87.         if [ $? = 0 ];then
  88.                         return 0
  89.         else
  90.                         kill_mc
  91.                         return 1
  92.         fi
  93. }
  94. function start_mc(){
  95.         #start
  96.         cd ../
  97.         sh start.sh &>./MC_server.log &
  98.         whith_mc $?
  99.         if [ $? = 0 ];then
  100.                 echo "MC启动脚本执行成功"
  101.                 email_yes ${server_mc}
  102.                 return 0
  103.         else
  104.                 echo "MC启动脚本执行失败"
  105.                 return 1
  106.         fi
  107.         cd start/
  108. }
  109. function email_no(){
  110.         local sj=`date`
  111.         echo "发送邮件- 监控"
  112.         local url_email="
  113.         来自守护使者${server_mc}监控系统的邮件!
  114.                                                                
  115.         问题描述:
  116.                 ${server_mc}在重启期间无法完成重启任务!
  117.                 如果得不到及时解决!可能玩家无法进入服务器!
  118.                
  119.         详细信息:
  120.                 重启时需要将MC进程杀死!  -- 杀死失败
  121.                 重启时需要将MC进程启动!  -- 启动失败
  122.                

  123.         发生时间:
  124.                 ${server_mc}在${sj}  无法重启!


  125.         解决方法:
  126.                 通过后台!请手动结束MC进程!监控系统即可自动启动
  127.                
  128.                                                                         请不要屏蔽本邮件!
  129.         "&>./log/mc_email_err.log
  130.         local telet_email="守护使者${server_mc}监控系统(错误)"
  131.         #发送邮件! 标题
  132.         for i in ${user_email[@]}
  133.         do
  134.                 email_url ${telet_email} ${i} ${url_email}
  135.         done
  136. }
  137. function email_no_1(){
  138.         local sj=`date`
  139.         echo "发送邮件-$js 监控"
  140.         local url_email="
  141.         来自守护使者${server_mc}监控系统的邮件!
  142.                                                                
  143.         问题描述:
  144.                 ${server_mc}在重启期间无法完成重启任务!
  145.                 如果得不到及时解决!可能玩家无法进入服务器!
  146.                
  147.         详细信息:
  148.                 重启时需要将MC进程杀死!  -- 杀死成功
  149.                 重启时需要将MC进程启动!  -- 启动失败
  150.                

  151.         发生时间:
  152.                 ${server_mc}在${sj}  无法重启!


  153.         解决方法:
  154.                 通过后台!请手动结束MC进程!监控系统即可自动启动
  155.                
  156.                                                                         请不要屏蔽本邮件!
  157.         "
  158.         local telet_email="守护使者${server_mc}监控系统(错误)"
  159.         #发送邮件! 标题
  160.         for i in ${user_email[@]}
  161.         do
  162.                 email_url ${telet_email} ${i} ${url_email}
  163.         done
  164. }
  165. function email_yiw(){
  166.         #正在意外停止!尝试重启
  167.         local sj=`date`
  168.         echo "发送邮件-$js 监控"
  169.         local url_email="
  170.         来自守护使者${server_mc}监控系统的报告邮件!
  171.                                                                
  172.         问题描述:
  173.                 ${server_mc}在运行期间意外停止!
  174.                 如果得不到及时解决!可能玩家无法进入服务器!
  175.                

  176.         发生时间:
  177.                 ${server_mc}在${sj}  意外停止!


  178.         解决方法:
  179.                 监控系统正在帮你重启${server_mc}!请等待最后结果!
  180.                 监控系统会以邮件方式通知你!
  181.                
  182.                                                                         请不要屏蔽本邮件!
  183.         "
  184.         local telet_email="守护使者${server_mc}监控系统(错误)"
  185.         #发送邮件! 标题
  186.         for i in ${user_email[@]}
  187.         do
  188.                 email_url ${telet_email} ${i} ${url_email}
  189.         done
  190. }
  191. function email_yiw1(){
  192.         #正在意外停止!尝试重启失败!
  193.         local sj=`date`
  194.         echo "发送邮件-$js 监控"
  195.         local url_email="
  196.         来自守护使者${server_mc}监控系统的报告邮件!
  197.                                                                
  198.         问题描述:
  199.                 ${server_mc}重启失败!
  200.                 玩家无法进入此服务器!如果监控系统无法完成启动任务!请手动解决
  201.                

  202.         发生时间:
  203.                 ${server_mc}在${sj}  重启失败!


  204.         解决方法:
  205.                 请手动重启${server_mc}!
  206.                 如果监控系统成功重启,监控系统会以邮件方式通知你!
  207.                
  208.                                                                         请不要屏蔽本邮件!
  209.         "
  210.         local telet_email="守护使者${server_mc}监控系统(错误)"
  211.         #发送邮件! 标题
  212.         for i in ${user_email[@]}
  213.         do
  214.                 email_url ${telet_email} ${i} ${url_email}
  215.         done
  216. }
  217. function email_yes(){
  218.         #正在意外停止!尝试重启失败!
  219.         local sj=`date`
  220.         echo "发送邮件-$js 监控"
  221.         local url_email="
  222.         来自守护使者${server_mc}监控系统的报告邮件!
  223.                                                                
  224.         问题描述:
  225.                 服务器:${server_mc}成功从新启动!
  226.                 ${server_mc}已经恢复正常!监控系统将会继续监控!
  227.                

  228.         发生时间:
  229.                 ${server_mc}在${sj}  重启成功!


  230.                
  231.                                                                         请不要屏蔽本邮件!
  232.         "
  233.         local telet_email="守护使者${server_mc}监控系统(成功)"
  234.         #发送邮件! 标题
  235.         for i in ${user_email[@]}
  236.         do
  237.                 email_url ${telet_email} ${i} ${url_email}
  238.         done
  239. }
  240. function mc(){
  241.         local unpid=`ps -ef | grep $mc | grep -v grep | cut -c 16-20`
  242.         if [ ${unpid}x = 1x ];then
  243.                 kill_mc
  244.                 sleep 1
  245.         else
  246.                 if [ ${unpid}x != ${dpid}x ];then
  247.                         kill_mc
  248.                         sleep 1
  249.                 fi
  250.         fi
  251.         #local mc="PaperSpigot-1.8.7-R0.1-SNAPSHOT-latest.jar"
  252.         ps -ef | grep -v grep | grep $mc &>>/dev/null
  253.         if [ $? != 0 ];then
  254.                 echo "MC进程意外停止!正在帮你重启进程!"
  255.                 echo "MC进程意外停止!正在帮你重启进程!" &>>./log/err_mc.log
  256.                 email_yiw ${server_mc}
  257.                 kill_mc
  258.                 sleep 10
  259.                 start_mc ${server_mc}
  260.                 sleep 1
  261.                 pid_mc
  262.                 #EMAIL
  263.                 if [ $? = 0 ];then
  264.                         echo "MC进程已经成功启动!"
  265.                         #EMAIL
  266.                 else
  267.                         cj
  268.                         echo "MC进程启动失败!"
  269.                         #EMAIL
  270.                         local zdyjs=0
  271.                         local zdyjs=`bc <<< ${zdyjs}+1 `
  272.                         if [ $zdyjs = 10 ];then
  273.                                 local zdyjs=0
  274.                                 email_yiw1 ${server_mc}
  275.                         fi
  276.                         echo "MC进程启动失败!"&>>./log/err_mc.log
  277.                         sleep 30
  278.                 fi
  279.         fi
  280. }
  281. function MC_PD_restart(){
  282.         if [ ${shi} = $H ];then
  283.                 if [ ${feng} = $F ];then
  284.                         kill_mc
  285.                         if [ $? = 0 ];then
  286.                                 start_mc ${server_mc}
  287.                                 if [ $? = 0 ];then
  288.                                         return 0
  289.                                 else
  290.                                         email_no_1
  291.                                         return 1
  292.                                 fi
  293.                         else
  294.                                 kill_mc
  295.                                 if [ $? = 0 ];then
  296.                                         start_mc ${server_mc}
  297.                                         if [ $? = 0 ];then
  298.                                                 return 0
  299.                                         else
  300.                                                 email_no_1
  301.                                                 return 1
  302.                                         fi
  303.                                 else
  304.                                         email_no
  305.                                         return 1
  306.                                 fi
  307.                                 email_no
  308.                                 # 120
  309.                                 return 1
  310.                         fi
  311.                 else
  312.                         return 1
  313.                 fi
  314.         else
  315.                 return 1
  316.         fi
  317. }
  318. function cj(){
  319.         local isa=`ps -ef | grep -v grep | grep $mc | wc -l`
  320.         if [ $isa -lt 1 ];then
  321.                 echo "发现多余进程!尝试杀死!"
  322.                 echo "发现多余进程!尝试杀死!"  &>>./log/err_mc.log
  323.                 local pid=`ps -ef|grep $mc | grep -v grep|cut -c 9-15`
  324.                 local dpid=`ps -ef | grep $mc | grep -v grep | cut -c 16-20`
  325.                 for i in ${dpid}
  326.                 do
  327.                         sleep 1
  328.                         kill -9 $i
  329.                 done
  330.                 for i in ${pid}
  331.                 do
  332.                         sleep 1
  333.                         kill -9 $i
  334.                 done
  335.         fi
  336. }
  337. INSTALL_email
  338. pid_mc
  339. aid=0
  340. rm_rf &>>/dev/null
  341. while true
  342. do
  343.         aid=`bc <<< ${aid}+1 `
  344.         # 3
  345.         DATE_U
  346.         zhou=$?
  347.         DATE_K
  348.         shi=$?
  349.         DATE_S
  350.         miao=$?
  351.         DATE_M
  352.         feng=$?
  353.         sjs=`date`
  354.         sleep 1
  355.         mc ${server_mc}
  356.         sleep 1
  357.         MC_PD_restart ${zhou} ${shi} ${feng} ${miao}
  358.         if [ $? = 0 ];then
  359.                 echo "任务已经执行!---${sjs}---- OK"
  360.                 echo "任务已经执行!----${sjs}--- OK" &>>./log/mc_access.log
  361.         else
  362.                 if [ ${aid} = 10 ];then
  363.                         aid=0
  364.                         echo "当前时间:${sjs}  下次务执行时间:${H}: ${F}"
  365.                 fi
  366.         fi
  367. done
  368. #结束!!!!
复制代码
  1. #!/bin/bash
  2. Server=""
  3. #你服务器名称
  4. mc="PaperSpigot-1.8.7-R0.1-SNAPSHOT-latest.jar"
  5. #你核心文件名称
  6. function main(){
  7.         sleep 10
  8.         java -Xincgc -Xms100M -Xmx712M -Xss1M -XX:-UseGCOverheadLimit -server -jar $mc
  9. }
  10. function killl(){
  11.         pid=`ps -ef|grep $mc | grep -v grep|cut -c 9-15`
  12.         kill  $pid &>>/dev/null
  13.         if [ $? = 0 ];then
  14.                 ps -ef|grep $mc | grep -v grep|cut -c 9-15|xargs kill -9
  15.         else
  16.                 local pid=`ps -ef|grep $mc | grep -v grep|cut -c 9-15`
  17.                 kill $pid &>>/dev/null
  18.         fi
  19. }
  20. main
  21. ps -ef|grep $mc | grep -v grep &>>/dev/null
  22. if [ $? = 0 ];then
  23.         echo "$server启动成功!"
  24. else
  25.         echo "$server启动失败!"
  26.         killl
  27.         sleep 2
  28.         killl
  29.         main
  30.         ps -ef|grep $mc | grep -v grep &>>/dev/null
  31.         if [ $? = 0 ];then
  32.                 echo "$server启动成功!"
  33.         else
  34.                 echo "$server启动失败!"
  35.         fi
  36. fi
  37. sleep 10
复制代码
  1. 文件夹start    里面创建文件   date_kill  将上面MC监控脚本写入!
复制代码
  1. MC服务端根目录下 start.sh文件  将MC启动脚本写入
复制代码
  1. 在MC服务端根目录下的start文件夹里面继续创建一个log日志文件夹
复制代码
  1. yum -y install screen
  2. #安装screen
  3. #最后启动脚本
  4. #(翻译:在当前主机新建一个后台窗口)
  5. screen -S mc
  6. #启动监控
  7. sh  date_kill
复制代码
  1. ps -ef | grep java | grep -v grep
复制代码

作者: 1748011755    时间: 2016-4-10 04:36
给你们带来一张图片!这个监控脚本是这个样子的!这个脚本正在开发中!刚刚修复一些小小的问题!需要测试!
[attach]10148[/attach]



作者: zuimc    时间: 2016-4-10 12:53
给楼主的钻研精神点个赞
作者: zuimc    时间: 2016-4-10 13:14
自动重启部分,建议使用screen -X 执行服务器关闭,直接kill不但导致数据丢失,还有可能造成损坏。
kill建议只使用在发现服务端完全没有反应了的情况下。
自动重启最好结合在线人数进行判断,若是用插件+bash来执行会更加方便,纯bash的话可以写socket获取服务器人数
作者: 1748011755    时间: 2016-4-11 17:41
zuimc 发表于 2016-4-10 13:14
自动重启部分,建议使用screen -X 执行服务器关闭,直接kill不但导致数据丢失,还有可能造成损坏。
kill建 ...

可以获取人数?

有没有例子!让我参考一下!我不要php,调用api速度慢!影响效率!如果可以!你给我发一个简单的 socket获取服务器人数  教程!我方便研究!谢谢!我需要这个东西!
作者: zuimc    时间: 2016-4-11 18:45
1748011755 发表于 2016-4-11 17:41
可以获取人数?

有没有例子!让我参考一下!我不要php,调用api速度慢!影响效率!如果可以!你给我发一 ...

纯shell可以实现的  -X的话可以直接用   socket的要百度下
作者: 1748011755    时间: 2016-4-11 18:48
zuimc 发表于 2016-4-11 18:45
纯shell可以实现的  -X的话可以直接用   socket的要百度下

问你个私人问题!我网站做好了!可以申请友链吗!
作者: V乐乐    时间: 2016-4-11 19:15
你真的是一位技术大触啊!
就差给你申精了~
先给人气!
作者: 1748011755    时间: 2016-4-11 19:19
V乐乐 发表于 2016-4-11 19:15
你真的是一位技术大触啊!
就差给你申精了~
先给人气!

谢谢了!我先申请我的皮肤站友链!   www.qy211.com

我的主站被我玩坏了!呜呜呜呜呜
作者: V乐乐    时间: 2016-4-11 19:20
1748011755 发表于 2016-4-11 19:19
谢谢了!我先申请我的皮肤站友链!   www.qy211.com

我的主站被我玩坏了!呜呜呜呜呜 ...

友链请去 申请/友链 版块申请
这里发我也不能帮你加= =
作者: 1748011755    时间: 2016-4-11 19:32
V乐乐 发表于 2016-4-11 19:20
友链请去 申请/友链 版块申请
这里发我也不能帮你加= =

谢谢!
作者: Wolverine    时间: 2016-4-12 06:44
厉害!膜拜技术大触,小的给你请安了
作者: stwflyman    时间: 2016-4-14 07:39
太好了,幸苦了
作者: 1748011755    时间: 2016-4-14 18:31
stwflyman 发表于 2016-4-14 07:39
太好了,幸苦了

有没有去尝试一下呢?
作者: 晓龍领域    时间: 2016-4-14 21:26
666太NB了
作者: 麟云之都    时间: 2016-4-16 15:24
自己开的和租的服务器都行么
作者: Jianghao7172    时间: 2016-4-16 15:42
四级就开始钻研PHP了?有兴趣的话加入我们的工作室,专注开发PHP网页以及程序 q群:530057603
这是PHP开发交流群,不是服务器宣传群,zuimc别删啊= =
另外,受到你的启发,我准备开发一个基于网页端的控制台(虽然没有Multicraft这么牛,但是基本功能需要具备)
作者: 1748011755    时间: 2016-4-19 23:48
麟云之都 发表于 2016-4-16 15:24
自己开的和租的服务器都行么

只要是Linux服务器,没问题!
作者: 1748011755    时间: 2016-4-19 23:49
Jianghao7172 发表于 2016-4-16 15:42
四级就开始钻研PHP了?有兴趣的话加入我们的工作室,专注开发PHP网页以及程序 q群:530057603
这是PHP开发 ...

java会吗?插件!php我也在考虑!不过我快要找工作了!估计暂时没有时间了!
作者: 图样图森破    时间: 2016-4-20 12:05
这个666




欢迎光临 最MC论坛 (http://www.zuimc.com/) Powered by Discuz! X3.2