背景:在这之前,灵宝童鞋曾经写过一个shell脚本,用来部署sit的核心系统服务器,而现在,核心这边又建立了自己的一套独立环境,这套环境是需要我们自己来维护的,每周必须要做的至少有清理日志,更新代码重新编译和部署,那么我们就需要每周手工去运行部署脚本并查看服务器是否部署成功。
其实这个部署脚本在一定程度上已经简化了我们单个服务器依次去部署的一些工作量了,但是大家都懂的,现在不是流行“自动化”么,于是就在想,有没有什么更“懒”的方法,帮我把运行shell脚本的事情也给做了,并告诉我每台机器日志删除、编译、部署每个步骤的运行结果。有了这个想法,就在网上找了一些相关的内容,真的发现了一个好东西------crontab!
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。
所以,综上简述,简单理解,crontab就是利用linux或者unix的定时任务(经过测试,每分钟的第一秒执行一次)去定时执行crontab文件里面指定的命令或者shell脚本。知道了这个定时任务,我们只需要把要我们想要在某个时间点执行的shell脚本加入到这个crontab文件中,并设定时间规则就可以了。下面给出实际操作:
先写出清理日志、编译、部署的shell脚本(这里只给出清理日志的简化部分,编译和部署的shell部分类似,就不在这里贴出了):
#! /bin/sh
#=============================================================================
echo "开始自动部署独立环境啦~~~" >> /home/admin/auto-build/info.log
echo "`date \"+%Y-%m-%d %H:%M:%S\"`" >> /home/admin/auto-build/info.log
echo "=================================================================" >> /home/admin/auto-build/info.log
echo "【step 1】clean the log file~" >> /home/admin/auto-build/info.log
#【1、清理上周日志文件】
cat /home/admin/auto-build/pub_perf.txt | while read line
do
ssh -n ${line}.d44.alipay.net "rm -f /home/admin/logs/$line.d44.alipay.net/*"
echo "`date \"+%Y-%m-%d %H:%M:%S\"`" >> /home/admin/auto-build/info.log
echo "清理 $line 独立服务器日志完成~" >> /home/admin/auto-build/info.log
echo -e "* * * * *\n" >> /home/admin/auto-build/info.log
done