最近,项目经理手里的某个老项目总不定时宕机,找到博主问有没有好的解决办法。由于该项目是微信项目,博主根据之前对公司其它大型微信项目整体代码的了解,判定为句柄数泄露和程序内存缓慢累积泄露问题,于是上服务器排查,果然项目启动一段时间后,就会出现文件句柄数飙升的情况。

    由于该项目在别人公司的使用人数并不多,故博主提出了每天晚上3:10定时重启tomcat服务器来解决。为啥要是3:10分呢?因为此时人少,且之前的这台服务器可能由定时任务,定时任务一般都在凌晨跑。

    本篇博客可能用到的命令:

chmod 755  t_restart.sh
shell脚本中相关知识:
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
crontab -e  打开任务计时器编辑文件

(1) 以下是重启tomcat定时任务的shell脚本t_restart.sh:

#/bin/bash
#version: 1.0.0
#author: aaron
#create time: 2018-07-7-31 12:30:00
#function instruction: this shell use to restart tomcat go online,use linux command

tpid=`ps aux | grep tomcat | grep -w '/opt/www/apache-tomcat-7.0.57' | grep -v grep |wc -l`
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo $dat >> /opt/t_restart.log
pidstr=$tpid"个进程"
echo $pidstr >> /opt/t_restart.log
if [ $tpid -ne 0 ]; then
  echo  ========shutdown=========== >> /opt/t_restart.log
  sh /opt/www/apache-tomcat-7.0.57/bin/shutdown.sh >> /opt/t_restart.log
  sleep 1
  #pid=`ps aux | grep "/opt/www/apache-tomcat-7.0.57" | grep -v grep |wc -l`
  tpid=`ps aux | grep tomcat | grep -w '/opt/www/apache-tomcat-7.0.57' | grep -v grep |wc -l`
  if [ $tpid -ne 0 ]; then
     echo ==========kill tomcat =============== >> /opt/t_restart.log
     spid=`ps -ef | grep '/opt/www/apache-tomcat-7.0.57' | grep -v grep | awk '{print $2}'`
     echo 000
     for id in $spid
     do 
      kill -9 $id
     done
     kill -9 $spid
     #/bin/kill -9 $spid 
     echo ==========kill success pid:$spid======================= >> /opt/t_restart.log
  fi
   echo ===============startup tomcat================== >> /opt/t_restart.log
   sh /opt/www/apache-tomcat-7.0.57/bin/startup.sh >> /opt/t_restart.log
   echo ===============startup tomcat success============= >> /opt/t_restart.log
else
  echo ================startup tomcat=================== >> /opt/t_restart.log
  sh /opt/www/apache-tomcat-7.0.57/bin/startup.sh >> /opt/t_restart.log
  echo ================startup tomcat success============= >> /opt/t_restart.log
fi

(2)linux定时任务crontab

          crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

 软件安装命令:

rpm -qa|grep cron 查看安装的cron相关软件
yum list|grep cron
yum -y install vixie-cron
yum -y install crontabs

说明:
          vixie-cron 软件包是 cron 的主程序;
          crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序

crond服务常用命令:

cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态
在CentOS系统中加入开机自动启动: chkconfig --level 345 crond on

cron 的主配置文件是 /etc/crontab,它包括下面几行:

Linux定时重启zabbix服务 linux服务器定时重启脚本_Linux定时重启zabbix服务

前四行是用来配置 cron 任务运行环境的变量。
a、SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
b、PATH 变量定义用来执行命令的路径。
c、cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
d、如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。
e、HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

限制对 cron 的使用:

 

        /etc/cron.allow和/etc/cron.deny 文件被用来限制对 cron 的使用,这两个使用控制文件的格式都是每行一个用户,两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,root 都总是可以使用 cron。
        如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

 

crontab 命令:

功能:设置计时器。

语法crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]
解释:cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command

参数:
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。

 

格式:
*   *  *  *  *  command
分 时 日 月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
例子:
 

(1)表示每晚的21:30重启apache。
        30 21 * * * /usr/local/etc/rc.d/lighttpd restart
(2)表示每月1、10、22日的4 : 45重启apache。
        45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
(3)表示每周六、周日的1 : 10重启apache。
        10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
(4)表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
        0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
(5)表示每星期六的11 : 00 pm重启apache。
        0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
(6)每一小时重启apache
        * */1 * * * /usr/local/etc/rc.d/lighttpd restart
(7)晚上11点到早上7点之间,每隔一小时重启apache
        * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
(8)每月的4号与每周一到周三的11点重启apache
        0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
(9)一月一号的4点重启apache
        0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
(10)每半小时同步一下时间
        */30 * * * * /usr/sbin/ntpdate 210.72.145.44

博主的计时器配置如下:

Linux定时重启zabbix服务 linux服务器定时重启脚本_运维_02



         注意事项:在某些情况下,服务器可能只有内网访问权限,且没有配置内网yum;此时,我们则需要自己下载安装包进行crond相关软件的安装。主要是:vixie-cron-3.0.1-39.i386.rpm、crontabs-1.7-7.noarch.rpm两个包的安装。

        安装命令:

rpm -qa|grep cron 查看安装的cron相关软件
rpm -ivh vixie-cron-3.0.1-39.i386.rpm 
rpm -ivh crontabs-1.7-7.noarch.rpm

       可能出现问题:Linux下启动Tomcat遇到Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

       解决方案:

#找到tomcat启动路径所在的目录
cd bin/
vi catalina.sh
#加入以下信息
export JAVA_HOME=/opt/jdk1.7.0_75
export JRE_HOME=$JAVA_HOME/jre

 

        以上是博主本次文章的全部内容,如果大家觉得博主的文章还不错,请点赞;如果您对博主其它服务器技术或者博主本人感兴趣,请关注博主博客,并且欢迎随时跟博主沟通交流。