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不知疲倦的时间表

原文地址:https://www.cnblogs.com/luckyzs/p/13398434.html