Linux下cron定时重启jar

安装crontab

先检查你的服务器是否安装了crontab

rpm -qa | grep crontab

我已经安装,所以如下如:

如果没有安装好~~~~

分别执行:
 

yum -y install vixie-cron
yum -y install crontabs

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

安装好了–启动和配置服务

cron服务相关命令:

service crond start //启动服务

service crond stop //关闭服务

service crond restart //重启服务

service crond reload //重新载入配置

service crond status //查看服务状态

cronTab相关命令:

crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)    //没事不要乱操作这个,会删除所有的定时任务,后果严重
  • 定时任务示例:

  • 每隔5秒执行一次
    */5 * * * * 
    
    每隔1分钟执行一次
    0 */1 * * * 
    
    每天凌晨执行
    0 0 * * * root command
    
    每周星期天早上五点执行
    0 5 * * sun root command
    
    每个月的前10天晚上10点开始每隔10分钟执行一次命令
    */10 22 1-10 * * root command
    
    从星期一到五,每个小时的第10分钟、第20分钟以及第30分钟都执行一次命令
    10,20,30 * * * 1-5 root command
    
    从早上10点到晚上10点,每个偶数的小时(比如10点,12点)里每五分钟运行一次命令
    */5 10-22/2 * * * root command
    
    @hourly 代表 0 * * * * ,每个小时运行一次
    @daily 代表 0 0 * * * ,每天凌晨运行一次
    @weekly 代表 0 0 * * 0 ,每周星期天凌晨运行一次
    @monthly 代表 0 0 1 * * ,每个月第一天凌晨运行一次
    @yearly 代表 0 0 1 1 * ,每年的头一分钟运行一次
    @reboot 重启后执行一次
    
    每天凌晨运行一次
     @daily command
    

    逻辑如下如:
     

    准备jar包启动脚本,我这里是一个完整的shell,包括start、stop、restart等方法,

  • 因此特意加了一个方法:

  • #根据状态启动或者重启项目
    ifsos(){ 
        is_exist 
        if [ $? -eq "0" ]; then 
            echo "${APP_NAME} is running. Pid is ${pid}. to restart" 
    		restart
        else 
            echo "${APP_NAME} is NOT running. to start" 
    		start
        fi 
    }

    完整脚本如下:

  • #!/bin/bash 
    #这里可替换为jar包名字
    APP_NAME=test-1.0.jar
    APP_PATH=/home/package
    #根据实际情况修改参数
    #APPFILE_PATH="-Dspring.config.location=/usr/local/config/application.properties"
    #使用说明,用来提示输入参数 
    usage() { 
        echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log|ifsos|backup]" 
        exit 1 
    } 
    #检查程序是否在运行 
    is_exist(){ 
        pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'` 
        #如果不存在返回1,存在返回0 
        if [ -z "${pid}" ]; then 
            return 1 
        else 
            return 0 
        fi 
    } 
     
    #启动方法 
    start(){ 
        is_exist 
        if [ $? -eq "0" ]; then 
            echo "${APP_NAME} is already running. pid=${pid} ." 
        else 
            #nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1 
    		###必须加入JAVA环境变量,否则crontab 定时启动jar时无效
    		source /etc/profile
    		#后台启动jar包,且控制环境变量,根据实际情况修改吧,不输出日志
            nohup java -Dfile.encoding=utf-8 -jar -Xms512m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1024m $APP_PATH/$APP_NAME >/dev/null 2>&1 &
        fi
    } 
     
    #停止方法 
    stop(){ 
        is_exist 
        if [ $? -eq "0" ]; then 
            kill -9 $pid 
        else 
            echo "${APP_NAME} is not running" 
        fi 
    } 
     
    #输出运行状态 
    status(){ 
        is_exist 
        if [ $? -eq "0" ]; then 
            echo "${APP_NAME} is running. Pid is ${pid}" 
    		restart
        else 
            echo "${APP_NAME} is NOT running." 
    		start
        fi 
    } 
    #根据状态启动或者重启项目
    ifsos(){ 
        is_exist 
        if [ $? -eq "0" ]; then 
            echo "${APP_NAME} is running. Pid is ${pid}. to restart" 
    		restart
        else 
            echo "${APP_NAME} is NOT running. to start" 
    		start
        fi 
    }
    
    #重启 
    restart(){ 
        stop 
    	sleep 5
        start 
    } 
     
    #日志
    log(){
            # 输出实时日志
        tail -n 100 -f /home/log/test/test.log
    }
     
     
    #根据输入参数,选择执行对应方法,不输入则执行使用说明 
    case "$1" in 
        "start") 
            start 
            ;; 
        "stop") 
            stop 
            ;; 
        "status") 
            status 
            ;; 
        "restart") 
            restart 
            ;; 
        "log") 
            log 
            ;; 
    	"ifsos") 
            ifsos
            ;; 
        *) 
    usage 
    ;; 
    esac

    重点crontab 命令写法:(为了测试,此处设定为2分钟重启一次jar)

  • */2 * * * *./etc/profile;sh /home/package/testRe.sh ifsos >> /homepackage/testRe-log.log 2>&1

     通过crontab -e 命令,进入编辑界面,编写上边的命令保存,重启cron服务,service crond restart

  • 查看结果:根据打印的cron日志/命令查询界面和jar包打印的日志,查看我们的定时脚本是否执行成功:

  • cron的脚本日志:

     命令查询pid每次不同:

     jar包日志有启动时间(相隔2分钟):

     由上图可以确定,我们的定时执行重启jar的定时任务,执行成功!

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值