利用crontab完成服务器自动化管理

 

          背景:在这之前,灵宝童鞋曾经写过一个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

我们把这段shell保存在clean-log.sh脚本中,然后就是新建crontab文件,用crontab -e命令,根据crontab的语法规则,建立定时任务,这里需要说明一下规则,很简单
“* * * * * [执行的命令]”,前面的几个“*”号是时间表达式,用一张图说明:

利用crontab完成服务器自动化管理
 
比如,我想在每周四的晚上10点1分清理独立环境的服务器日志,那么命令如下:

利用crontab完成服务器自动化管理
 
通过上面简单的步骤,就可以达到每周四晚上10点自动清理日志,重新部署编译的效果了,然后再进一步,我们把编译、部署过程中的一些必要信息输出到一个log文件中,如下:

利用crontab完成服务器自动化管理
 
这样我们就可以获得部署过程中的一些信息了,在此基础上,通过查找关键字(比如SUCCESS/FAILED)来获得哪些步骤是否成功的信息,然后再通过自动发送邮件的方式把这些信息发送给相关人员,就大功告成了。这里就不再赘述了~~~
最后附上这些过程中可能遇到的问题和注意点:
1、利用服务器进行自动化部署脚本的时候,一定要把shell脚本的权限放开,否则定时任务虽然可以起,但是没有权限执行就悲剧了,命令:chmod 777 [shell脚本名字];
2、利用服务器执行定时任务的时候涉及到文件的一定要写绝对路径,否则系统的定时任务不知道执行(读取、写入)哪个目录下的文件中;
3、当想写入文件内容并换行的话,只用 echo 命令加上“\n”是不行的,必须要加上echo -e 参数加上“\n”,否则只会打印出来“\n”而不是换行了,原因?官方解释:Turns on the interpretation of backslash-escaped characters,意思是必须要加上-e ,才能解释反斜杠的字符命令,否则只会当成普通的字符串了。
4、如果有童鞋根据这个来做了类似的配置,欢迎把中间遇到的问题和解决方法贴出来哈~

你可能感兴趣的:(crontab,脚本,自动化)