linux腳本(shell)之tomcat服務定時重啓任務

    最近,項目經理手裏的某個老項目總不定時宕機,找到博主問有沒有好的解決辦法。因爲該項目是微信項目,博主根據以前對公司其它大型微信項目總體代碼的瞭解,斷定爲句柄數泄露和程序內存緩慢累積泄露問題,因而上服務器排查,果真項目啓動一段時間後,就會出現文件句柄數飆升的狀況。html

    因爲該項目在別人公司的使用人數並很少,故博主提出了天天晚上3:10定時重啓tomcat服務器來解決。爲啥要是3:10分呢?由於此時人少,且以前的這臺服務器可能由定時任務,定時任務通常都在凌晨跑。linux

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

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:apache

#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#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定時任務crontabtomcat

          crontab命令常見於Unix和Linux的操做系統之中,用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於「crontab」文件中,以供以後讀取和執行。一般,crontab儲存的指令被守護進程激活。crond 經常在後臺運行,每一分鐘檢查是否有預約的做業須要執行。這類做業通常稱爲cron jobsbash

 軟件安裝命令:服務器

rpm -qa|grep cron 查看安裝的cron相關軟件
yum list|grep cron
yum -y install vixie-cron
yum -y install crontabs

 說明:
          vixie-cron 軟件包是 cron 的主程序;
          crontabs 軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序微信

crond服務經常使用命令:this

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,它包括下面幾行:spa

前四行是用來配置 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列表示分鐘159 每分鐘用*或者 */1表示
2列表示小時1230表示0點)
3列表示日期131
4列表示月份112
5列標識號星期060表示星期天)
6列要運行的命令

例子:
 

(1)表示每晚的21:30重啓apache。
        30 21 * * * /usr/local/etc/rc.d/lighttpd restart
(2)表示每個月一、十、22日的4 : 45重啓apache。
        45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
(3)表示每週6、週日的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


博主的計時器配置以下:


         注意事項:在某些狀況下,服務器可能只有內網訪問權限,且沒有配置內網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

 

        以上是博主本次文章的所有內容,若是你們以爲博主的文章還不錯,請點贊;若是您對博主其它服務器技術或者博主本人感興趣,請關注博主博客,而且歡迎隨時跟博主溝通交流。

相關文章
相關標籤/搜索