定时检测 jenkins 并自动重启

服务器安装 jenkins 持续集成,jenkins 常常会挂掉,那么就需要想办法让jenkins 在挂掉后自动重启。
本文采用 shell脚本 + crontab 来定时检测 jenkins 运行状态,如果挂掉了就重启

先了解一些预备知识

linux 清空文件内容的方法

1
2
3
4
5
$ : > filename 
$ > filename
$ echo "" > filename
$ echo > filename
$ cat /dev/null > filename

linux 判断文件行数的方法

1
2
$ cat test1.sh |wc -l
$ wc -l test1.sh

Linux crontab命令

  • -e : 执行文字编辑器来设定时程表
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

时程表的格式如下:

1
f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
下面看看几个的例子:

1
2
3
4
5
6
7
0 */3 * * * /sbin/service httpd restart  意思是每3个小时重启一次apache 

30 8 * * * /sbin/service sshd start 意思是每天8:30开启ssh服务

59 23 * * * /sbin/service sshd stop 意思是每天23:59关闭ssh服务

0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

检测 jenkins shell 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

#!/bin/bash

log_file="/root/build_jenkins.log"

# 定义一个函数 用来写入 log 文件
writeLog() {
if [ ! -e $log_file ]
then
echo "文件不存在 创建一个"
touch ${log_file}
fi
# 判断 log 文件 超过 300 行 清空log文件
count=`cat $log_file | wc -l`
if [ $count -gt 300 ]
then
echo "" > $log_file
fi
nowtime=`date +%Y%m%d%H%M%S`
echo $nowtime$1 >> $log_file
}

jenkins_num=`pgrep -f "/var/lib/jenkins"|wc -l`

if [ $jenkins_num -lt 1 ]
then
systemctl restart jenkins
writeLog " restart jenkins"
else
echo "jenkins working"
writeLog " jenkins working"
fi

在 crontab 中设置定时执行命令

1
crontab -e
1
*/5 * * * * /bin/sh /root/check_jenkins.sh >/dev/null 2>&1

然后在 log 查看 cron 日志

1
2
$ cd /var/log
$ tail -f cron

好的文字有着水晶般的光辉,仿佛来自星星。
——王小波