美文网首页
crontab定时任务

crontab定时任务

作者: Y了个J | 来源:发表于2021-08-25 15:33 被阅读0次
    使用crontab配合shell脚本定时清理缓存

    Linux服务器用一段时间就会出现buff/cache内存占用过多的情况,导致free空闲内存变得非常少,严重影响使用;

    这个时候就可以用如下命令去清除一下cache内存

    echo 1 > /proc/sys/vm/drop_caches
    echo 2 > /proc/sys/vm/drop_caches
    echo 3 > /proc/sys/vm/drop_caches
    

    每一次都自己敲一遍着实麻烦,不如设置一个定时清理的脚本

    首先切换到root账户 su root
    找一个目录,然后创建脚本文件 vi cleanCache.sh
    添加如下内容

    #!/bin/sh
    LOG_PATH="/var/log"
    
    used=`free -m | awk 'NR==2' | awk '{print $3}'`
    free=`free -m | awk 'NR==2' | awk '{print $4}'`
    
    echo "==============开始清理缓存=============" >> $LOG_PATH/mem.log
    date >> $LOG_PATH/mem.log
    
    echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> $LOG_PATH/mem.log
    
    if [ $free -le 600 ] ; then
        sync && echo 1 > /proc/sys/vm/drop_caches
        sync && echo 2 > /proc/sys/vm/drop_caches
        sync && echo 3 > /proc/sys/vm/drop_caches
        used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`
        free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`
        echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> $LOG_PATH/mem.log
        echo "OK" >> $LOG_PATH/mem.log
    else
        echo "Not required" >> $LOG_PATH/mem.log
    fi
    exit 1
    

    通过如下命令测试脚本是否正常运行

    chmod 777 cleanCache.sh
    ./cleanCache.sh
    

    下面开始设置自动定期清理

    crontab -e
    

    1.Ctrl+O 写入
    2.出现“FIile name to Write...”,输入Enter
    3.Ctrl+x 保存输出

    在末尾添加如下内容:

    * */3 * * * ./home/HwHiAiUser/cleanCache.sh  #每三小时执行cleanCache脚本
    */1 * * * * echo "Good morning" >> /home/HwHiAiUser/test.txt  #每分钟输出日志到test.txt
    */1 * * * * /home/HwHiAiUser/test.sh
    

    test.sh内容

    #!/bin/bash
    echo "nihao" >> /home/HwHiAiUser/1.txt
    

    保存后提示crontab: installing new crontab 即生效

    然后输入如下指令可以查看是否成功

    crontab -l
    

    到此就大功告成了。

    使用crontab配合shell脚本定时检测拉起服务

    1、新建脚本check_nginx.sh

    #!/bin/bash
    APP_NAME="nginx: master"
    BIN_PATH="/usr/local/nginx/sbin"
    
    #检测方法
    checkStatus() {
      pid=$(ps -ef |grep "$APP_NAME" |grep -v "grep" |awk '{print $2}');
      #datetime=`date +%Y-%m-%d,%H:%m:%s`
      datetime=`date`
      if [ -z "${pid}" ]; then
         echo "$datetime ---- 开始启动服务$APP_NAME"
         cd $BIN_PATH
         ./nginx
      else
         echo "$datetime ---- 项目$APP_NAME已经启动,进程pid是${pid}!"
      fi
    }
    
    checkStatus
    

    脚本授权:

    chmod a+x /usr/local/check/check_nginx.sh
    

    2、建立定时任务

    crontab -e
    
    #新建定时任务,每分钟检测一次Nginx的状态,如果Nginx没有启动,就执行启动命令
    * * * * * /usr/local/check/check_nginx.sh   >> /var/log/check_nginx.log
    

    3、查看定时任务

    crontab -l
    

    查看日志

    tail -200f /var/log/check_nginx.log
    

    相关文章

      网友评论

          本文标题:crontab定时任务

          本文链接:https://www.haomeiwen.com/subject/ppndiltx.html