Crontab
一、定义
CRONTAB是一个用于设置周期性执行任务的工具
优势:兼容几乎所有Linux版本
二、远程终端工具推荐
1、Git Bash(Windows)
- 优点:模拟Linux命令行、自带强大的命令库
2、Terminal(Linux,MacOS)
- 优点:系统原生、操作简单、功能库强大
三、crontab安装
1、安装crond服务和crontab工具(CentOS7)
yum clean all
yum update
yum install -y cronie crontabs
四、验证CROND服务
1、验证crond服务和crontab工具(CentOS7)
-
检查crond服务是否安装及启动
# && 判断左侧执行成功,才执行右侧 # systemctl status crond:检查crond当前服务是否安装在当前系统服务中 # 返回:inactive(未启动)与active(running)(已启动) 两种状态 yum list cronie && systemctl status crond
-
检查crond工具是否安装
# yum list crontabs:检查crontabs工具是否已经安装到yum的安装包列表当中 # which crontab:检查crontabs工具安装在系统的哪个目录中 # crontab -l:返回当前crontabs的任务列表 yum list crontabs && which crontab && crontab -l
五、CRONTAB架构
# 1、登录主机
# 2、登录crontab表单
crontab -e
# 3、输入
# * * * * *:分 时 日 月 周
# my command:要执行的命令或者脚本
* * * * * my command
# 保存并退出
:wq
# 4、返回crontabs的任务列表
crontab -l
# 5、重启守护进程
systemctl restart crond
# 6、查看执行状态
systemctl status crond
六、CRONTAB文件格式
1、格式
* * * * * my command
占位符 | 含义 | 范围 |
---|---|---|
第一个占位符* | 分 | 0~59 |
第二个占位符* | 时 | 0~23 |
第三个占位符* | 日 | 1~31 |
第四个占位符* | 月 | 1~12 |
第五个占位符* | 周 | 0~6(0代表星期日,1-6代表星期一至星期六) |
my command | 命令或脚本 |
2、特殊符号代表某一个时间的特定含义
特殊符号 | 含义 |
---|---|
* | 取值范围内的数字,通常代表对应时间区间内所涵盖的所有数字 |
/ | 每,通常与*组合.例如:每多少分钟/小时 |
- | 到。2-10(分占位符):2到10分钟 |
, | 分开几个离散的数字。2,10(分占位符):第2分钟和第10分钟 |
注:占位符和命令要有空格隔开。每行都是一个表单任务。设置后需重启守护进程
3、示例
# 每分钟打印一行shell输出并写入文件
* * * * * echo -e "Hello" > /root/test.out
七、CRONTAB配置文件
1、系统配置文件
vim /etc/crontab
2、系统用户crontab配置文件保存目录
crontab -e
# 保存目录:/var/spool/cron/
# 如果是root用户,实际编辑的是:/var/spool/cron/root
# 如果是其他用户(例:user01),实际编辑的是:/var/spool/cron/user01
八、CRONTAB环境变量
1、添加PATH到/etc/crontab
# 例如添加java环境变量
vim /etc/crontab
# 追加PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_111/bin
2、在执行具体任务前引入系统/用户环境变量(推荐)
# 每天2:30
# source /etc/profile:手动添加一个系统级别的环境变量,给当前用户使用。以便给sh命令使用
30 2 * * * source /etc/profile;sh /root/test.sh
# 添加一个用户级别环境变量
30 2 * * * source ~/.bash_profile;sh /root/test.sh
# 重启,使crond任务生效
systemctl restart crond
注:要在/etc/profile和~/.bash_profile配置要用到的环境变量
九、CRONTAB命令行
1、编辑并保存当前用户的计划任务
crontab -e
systemctl restart crond
2、查看当前用户(root)保存的计划任务
crontab -l
cat /var/spool/cron/root
十、CRONTAB日志
1、Cron日志保存在系统目录/var/log/cron
# 查看任务记录
tail -n 2 /var/log/cron
输出
Mar 25 18:53:01 crontab CROND[8900]: (root) CMD (source /etc/profile;sh /root/test.sh)
# Mar 25 18:53:01:时间
# CROND[8900]:守护进程执行的第8900条任务
# (root):用户
# CMD ():crond的命令
十一、CRONTAB实战
1、清理系统日志
1.1、命令清除
# 1、进入存放系统日志的目录
cd /var/log
# 2、列出所有日志文件的大小
du -sh *
# 3、打开任务表单
crontab -e
# 添加记录
# 每日1点
# messages系统的主要日志
# cat /dev/null 空文件 放到 /var/log/messages,达到清空messages的目的
* 1 * * * cat /dev/null > /var/log/messages
:wq
# 4、查看任务表单
crontab -l
# 5、使任务生效
systemctl restart crond
1.2、脚本清除
# 创建脚本
vim /root/log_clean.sh
#!/bin/sh
cat /dev/null > /var/log/messages
cat /dev/null > /var/log/secure
:wq
# 添加任务
* 1 * * * sh /root/log_clean.sh
2、备份源代码(Source Code)
2.1、准备
/home/backup : 备份存放的目录
/home/script : 执行备份脚本存放的目录
/home/www : 源代码存放的目录
2.2、创建脚本文件
vim /home/scrip/www_backup.sh
#!/bin/sh
basedir=/home/backup
www_src=$basedir/www_src/$(date +%F_%H%M)
[ ! -d "$www_src" ] && mkdir -p $www_src
cd /home
tar -jpcf $www_src/www.tar.bz2 www
crontab -e
* * * * * sh /home/scrip/www_backup.sh
:wq
systemctl restart crond
十二、CRONTAB在iptables上的应用
时时监控网络状态,并将blacklist的IP地址添加iptables链中,并将这些IP加入黑名单中,禁止访问主机。
1、关闭firewalld
# 查看防火墙状态
systemctl status firewalld
# 禁用该服务
systemctl disable firewalld
# 关闭该服务
systemctl stop firewalld
2、安装iptables-services
# 安装
yum install iptables-services
# 确认
y
# 开启服务
systemctl enable iptables
# 启动服务
systemctl start iptables
# 验证
iptables -V
3、编写脚本
cd /data/script
vim /data/script/firewall.sh
#!/bin/sh
# 清空iptables的所有目录
iptables -F
list=/data/script/blacklist.txt
for line in `cat $list`;do
iptables -I INPUT -s$line -j DROP
echo "$line is dropped into blacklist"
done
crontab -e
* * * * * source /etc/profile;sh /data/script/firewall.sh
:wq
systemctl restart crond
iptables -nvl
十三、CRONTAB在Jenkins拓展
1、安装Jenkins
# 安装jenkins
yum install jenkins
# 确认
y
# 查看java的安装路径
which java
# 查看java版本
java -version
# 编辑jenkins的配置文件
vim /etc/init.d/jenkins
# 找到candidates 添加 当前机器的java所在路径
# 启动服务
systemctl start jenkins
# 查看jenkins服务是否正常启动 并查看jenkins是否打开8080端口监听服务
lsof -i:8080
2、WEB配置jenkins
- 主机IP:8080:登录jenkins配置界面
- 安装推荐插件
- 创建管理员用户
- 开始使用Jenkins
- 创建一个新任务
- 输入名称 并 点击“构建一个自由风格的软件项目”
- 构造触发器下 ==> 勾选“Build periodically”
- 日程表输入表达式(例如:* * * * *)
- 构建下 ==> 增加构建步骤 ==> 选择“Execute shell” ==> command输入 echo "Hello"
- 保存
十四、常用的CRON(来自网络)
#1、在 12:01 a.m 运行,即每天凌晨过一分钟。这是一个恰当的进行备份的时间,因为此时系统负载不大。
1 0 * * * /root/bin/backup.sh
# 2、每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业。
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
# 下面例子与上面的例子效果一样:
59 11 * * 1-5 /root/bin/backup.sh
# 3、每5分钟运行一次命令
*/5 * * * * /root/bin/check-status.sh
# 4、每个月的第一天 1:10 p.m 运行
10 13 1 * * /root/bin/full-backup.sh
#5、每个工作日 11 p.m 运行。
0 23 * * 1-5 /root/bin/incremental-backup.sh
十五、ubuntu下使用
# 安装(一般情况下ubuntu自带cron服务)
apt-get install cron
# 启动
service cron start
# 重启
service cron restart
# 停止
service cron stop
# 检查状态
service cron status
# 查询cron可用的命令
service cron
# 检查Cronta工具是否安装
crontab -l
# 需要注意的是第一次使用crontab需要选择编辑器
# 选择的是3 vim编辑器
# 如果需要重新选择只需要
sudo select-editor
3
该内容学习自慕课网Crontab不知疲倦的时间表