Linux系统Crontab定时任务 - 简述

To: 写给第一次使用定时任务的小白


逻辑分为以下三点: ①建立一个可执行文件(权限要求自己定义,有权限执行就行)。②vim /etc/crontab 编辑定时程序   ③程序会根据定时代码定时执行程序  


①建立一个可执行文件(权限要求自己定义,有权限执行就行):

    

MAILTO=root 表示执行用户  我一般不用这个, 因为user-name 直接用root即可(这么写可能会不妥,但是我不知道有什么不妥,在下不是运维是JAVA--这有可能是JAVA被黑的最惨的一次)


中间的时间什么的, 和JAVA定时器代码的规则查不了多少,  这里*/10 就是指 每10分钟执行一次  

至于root后面的  sh  /home/dabackup/db2backup.sh  则是定时程序执行的指令


有些第一次使用定时器的同学可能尝试了很多网上直接copy的定时代码但是发现/etc/crontab上并没有什么毛病就是程序不跑

首先我们要确定的是: 系统重新加载过定时程序 指令: /sbin/service crond reload

然后重启服务指令:  /sbin/service crond restart 

【附加:启动服务指令sbin/service crond start    关闭服务指令 /sbin/service crond stop】



如果重新载入&重新启动了定时程序还是不行, 那肯定是执行代码有问题, 这里说的执行代码说的是sh  /home/dabackup/db2backup.sh里面的定时任务的内容代码

【定时清理内存  注意vim sh文件时的set ff格式  设置为set ff=unix】
#!/bin/bash
echo "current time is $(date -d "today" +"%Y-%m-%d-%H-%M-%S")"  >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#系统分配的区总量 
mem_total=`free | grep "Mem:" |awk '{print $2}'` 
echo "mem_total is $mem_total " >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前剩余的大小 
mem_free=`free | grep 'buffers/cache' | awk '{print $3}'`

echo "mem_free is $mem_free" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前已使用的used大小 
mem_used=`free -m | grep Mem | awk '{print  $3}'` 
echo "mem_used is $mem_used" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
if (($mem_used != 0)); then 
#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0 
mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc` 
echo "free percent is $mem_per" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M-%S") free percent is : $mem_per"
echo $DATA >> /usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo $DATA >> /var/log/mem_detect.log
#设置的告警值为44%(即使用超过56%的时候告警)。 
mem_warn=0.4 
echo "mem_warn is $mem_warn"  >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前剩余百分比与告警值进行比较(当大于告警值(即剩余44%以上)时会返回1,小于(即剩余不足44%)时会返回0 ) 
mem_now=`expr $mem_per \> $mem_warn` 
echo "剩余百分比与警告值比较 mem_now is $mem_now"  >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo "when mem_now is 1 , means mem is ok ! "  >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log

echo "-----------------------------------" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#如果当前使用超过56%(即剩余小于44%,上面的返回值等于0),释放内存
if (($mem_now == 0)); then 
echo "but now the mem_now is 0 ,小于(即内存剩余不足44%),所以清理内存, start to clear memery....." >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "---> start auto clear memery is OK ! $DATA , warn is $mem_warn ,小于(即内存剩余不足44%),所以清理内存, " >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d_%H).log
fi


#取当前空闲cpu百份比值(只取整数部分) 
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
echo "cpu_idle percent is $cpu_idle,cpu 剩余量充足,警告值是当剩余不足30%时,自动清理内" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo "================================================================" >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#设置空闲cpu的告警值为30%,如果当前cpu使用超过70%(即剩余小于30%),立即发邮件告警,自动清理内存 
if (($cpu_idle < 30)); then
echo " cpu 剩余不足30% ,所以清理内存, start to clear memery....." >>/usr/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
      sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "--->cpu used more than 70% ,so start auto clear memery is OK ! $DATA , warn is $mem_warn " >>/usr/tomcat_treasure/logs/memery_monitor/memstat_cpu_auto_$(date +%Y%m%d_%H).log
fi
fi

例如我的这个定时清理服务器内存的代码, 你可以不用去看细节,但是,在你确定/etc/crontab的语句没有问题之后,你应该检测这里的执行代码没有错误,可以模拟系统定时手动复制粘贴跑一边这些代码,诸如会发现

①路径不对  

②系统没有这个指令(网上大拿写的系统和我们的系统版本、类型不一致,都会导致这些问题) 

③编码问题: 在WinSCP上新建,用Notepad++编辑的文件会导致一些编码问题, 这时候可以vim 你的执行文件(本文是vim /home/dbbackup/db2backup.sh) ,进去之后直接/set ff  查询编码格式     如果不是unix格式   执行/set ff=unix  则自动转换为unix格式 ---->编码问题一般解决系统报错 $'\r' command not found  其实就是Notepad++的换行指令和unix的换行指令是不兼容的.


综上所述,  其实都是一些很小的问题, 但是作为一个码农我们要从用户角度出发,内心要驻扎一个产品经理的思维模拟服务器小白第一次建立定时程序时会有可能出现的问题, 来做一个小小的归纳, that's all. Good luck & have fun.


猜你喜欢

转载自blog.csdn.net/BertonYip/article/details/80389244