【Linux】系统学习Crontab定时任务

摘要

crontab 是一个用于设置周期性执行任务的工具。目前服务器端的运行环境大多数为 Linux,在日常的运营和维护中会有很多需要定期执行的操作,其中有些操作是可以机械的定期执行的操作,所以我们可以使用 crontab 定时服务来设置定时任务,从而减少手动操作的任务,帮助提高工作效率。

一、cron 定时任务

1.安装 crond 服务和 crontab 工具

(1)相关命令

# 清除yum缓存
yum clean all

# 更新系统的安装包到最新版本
yum update

# 安装cron服务和crontab工具[-y表示yes,没有的话需要手动输入yes]
yum install -y cronie crontabs

(2)验证 crond 服务

# 检查cond服务是否安装及启动:
yum list cronie && systemctl status crond

# 检查crontab工具是否安装:
yum list crontabs && which crontab && crontab -l

二、crontab 架构

1.执行步骤

# 1.新建|编辑定时任务
crontab -e

# 2.查看定时任务列表[当前用户(root)保存的计划任务]
crontab -l
#或
cat /var/spool/cron/root

# 3.重启crond进程
systemctl restart crond

# 4.查看crond状态
systemctl status crond

2.contab 配置文件格式

*     *     *    *    *   [username]   my command
分    时    日   月   周   [执行用户名]  要运行的命令
0-59 0-23 1-31 1-12  0-6
* 取值范围内的所有数字
/ 每
- 某个区间
, 几个数的集合

3.crontab 配置文件

(1)系统配置文件

/etc/crontab

(2)系统用户 crontab 配置文件保存目录[crontab -e 所编辑的文件]

/var/spllo/cron/[目录]
root:/var/spppl/cron/root[文件]
user01:/var/spppl/cron/user01[文件]
# 创建用户
useradd user01
# 使用指定用户登陆系统
su - user01

4.Crontab 环境变量

(1)添加 PATH 到/etc/crontab

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_111/bin
# 可以直接在定时任务文件使用java程序

(2)在执行具体任务前引入系统/用户环境变量

# [系统级别环境变量]
30 2 * * * source /etc/profile;sh /root/test.sh

# [用户级别环境变量]
30 2 * * * source ~/.bash_profile;sh /root/test.sh

(3)操作步骤

1)添加环境变量
# /etc/profile 或者 /root/.bash_profile
PATH=$PATH:/usr/local/jdk1.8.0_111/bin
export PATH
2)完成执行脚本
# /root/test.sh
java -version 2> /root/script.out
3)设置定时任务
# 先使/etc/profile生效[添加环境变量],后使用sh执行脚本文件
* * * * * source /etc/profile;sh /root/test.sh
* * * * * source /root/.bash_profile;sh /root/test.sh

三、实战

1.crontab 日志

(1)cron 日志保存在/var/log/cron文件中

# 查看最近的两条cron日志
tail -n 2 /var/log/cron

2.清理系统日志

(1)系统日志的存放位置: /var/log/messages

# /var/log目录下日志[平时主要用到的日志文件]
cron -- 定时任务日志
secure -- 相关ssh服务日志
messages -- 系统总日志
firewalld -- 系统防火墙日志
lastlog -- 登录日志
# 查看当前目录下所有文件的大小
du -sh .

# 清空系统日志 [/dev/null代表一个空文件]
* 1 * * * cat /dev/null > /var/log/messages

(2)同时清理多个日志文件[使用脚本文件]

1). 文件:/root/log_clean.sh
#!/bin/sh

cat /dev/null > /var/log/messages
cat /dev/null > /var/log/secure
2). 定时任务
# 定时执行日志清理脚本
* * * * * sh /root/log_clean.sh

3.crontab 备份 source code

(1)准备工作

backup -- 备份文件存放目录
script -- 脚本文件目录
www --- 网站根目录

(2)编写执行备份的脚本文件[/data/script/www_backup.sh]

#!/bin/bash

basedir = /data/backup

www_src = $basedir/www_src/$(date +%F_%H%M)

[ ! -d "$www_src" ]  && mkdir -p $www_src

cd /data
tar -jpcf $www_src/www.tar.bz2 www

(3)脚本解释说明

1). basedir = /data/backup

定义一个变量,名称为basedir,值为/data/backup

2). $(date +%F_%H%M)

获取系统的日期时间,并拼上日期(%F),再拼上小时(%H)和分钟(%M) =》 [2018-03-16_0715]

3). www_src = $basedir/www_src/$(date +%F_%H%M)

使用变量 basedir 的值,再拼接出多层目录,赋值给 www_src[值为/data/backup/www_src/{当前日期时间的目录(动态)}]

4). [ ! -d "$www_src" ]

相当于 if 的判断,判断$www_src 是否不是一个目录

5). tar -jpcf $www_src/www.tar.bz2 www

打包/data/www 目录为 www.tar.bz2,并放置到$www_src 目录下[/data/backup/www_src/{当前日期时间的目录(动态)}/]

(4)创建定时任务

* * * * * sh /data/script/www_backup.sh

(5)重启定时任务使其生效

systemctl restart crond

(6)查看备份文件大小[被备份的原目录是 wordpress 系统]

# /data/backup/www_src/2018-03-16_0715/
8.4M    www.tar.bz2

4.crontab 在 iptables 上的应用

(1)应用场景:

DDOS 攻击或匿名暴力破解导致系统无法正常访问

(2)解决之道:

使用 crontab 集成 iptables,实时监控系统的网络状态,及时将可疑的 ip 地址加入到网络黑名单

(3)iptables 简介:

iptables 作为 Linux 下的内核防火墙,能够通过添加相应的规则,检测、修改、重定向、转发和丢弃 ip 数据包,从而过滤网络数据,实现保护系统网络的功能

CentOS7 默认使用 firewalld 服务维护内核防火墙,我们需要禁用 firewalld 服务,并安装 iptables 作为系统默认防火墙。

(4)准备工作

# 查看当前firewalld进程状态
systemctl status firewalld

# 关闭并禁用firewalld
systemctl disable firewalld
systemctl stop firewalld

# 安装iptables服务
yum install iptables-services
[yes]

# 开启iptables服务
systemctl enable iptables

# 启动iptables服务
systemctl start iptables

# 验证iptables是否安装成功
iptables -V

(5)设置网络访问黑名单文件/data/script/blacklist.txt

(6)脚本实现[/data/script/firewall.sh]

#!/bin/bash

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

(7)脚本解释说明

1). iptables -F

清空 iptables 的所有记录

2). for line in cat $list;do

对/data/script/blacklist.txt 循环输出每一行

3). iptables -I INPUT -s$line -j DROP

添加一个 input 链 -s 相当于 source,将每一行的数据,传递给 iptables -j DROP 相当于一个 drop 操作,将当前主机接收到的数据包进行一个丢弃操作 =》将 blacklist.txt 中的 ip 地址做一个拒绝访问的操作,使黑名单中的 ip 地址无法访问主机

4). echo "$line is dropped into blacklist"

对每一行的 ip 地址拒绝访问后,输出一条信息提示

(8)创建定时任务

* * * * * source /etc/profile; sh /data/script/firewall.sh

(9)查看 iptables 拒绝访问主机的 ip 列表

iptables -nvL

5.crontab 在 Jenkins 上的扩展

(1)Jenkins 介绍

java编写的开源、持续、集成工具,最大优势就是将开发人员和运维人员完美的结合在一起。

(2)使用前提

# 安装
yum install jenkins
[y]

# 查看系统java路径
which java

# 查看系统java版本
java -version

[jenkins 要求的最低版本要求配置>1.8.0_111]

(3)编辑 jenkins 的启动配置文件[/etc/init.d/jenkins]

[=>搜索 candidates 关键词] 默认调用的 java 目录是/usr/bin/java 和/usr/lib/jvm/***/bin/java

添加 java 的路径 /usr/local/jdk1.8.0_111/bin/java

(4)相关命令

#启动jenkins服务
systemctl start jenkins

# 查看jenkins服务是否正常启动,并查看jenkins服务是否打开8080端口监听服务
lsof -i:8080

(5)在 web 网页中进行配置并使用 jenkins

# 1.访问jenkins的后台地址
10.110.16.5:8080

# 2.登录密码保存在系统的目录下
/var/lib/jenkins/secrets/initialAdminPassword文件中

# 3.自定义jenkins=》安装插件

# 4.创建第一个管理员用户

# 5.创建新任务
1)构建自由风格的软件项目
2)构建触发器 => Build Periodically => 日程表[相当于crontab定时任务的时间表单] => * * * * *
3)构建 => 增加构建步骤 => Execute shell => Command[执行定时任务时执行的操作] => echo "this is a test build"

【学习参考】:慕课网-Crontab 不知疲倦的时间表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏应用案例

Linux常用软件安装总结

首先说xshell一个好用的功能,如果你同时要管理几台一样的服务器组成的集群,一台一台操作很麻烦,可以使用xshell菜单栏——工具——勾选发送键输入到所有会话...

2967
来自专栏Java技术分享

手把手教你用Mysql-Cluster-7.5搭建数据库集群

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载...

4748
来自专栏葡萄城控件技术团队

如何在ASP.NET中生成HTML5离线Web应用

传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能。离线功能使得Web应...

2146
来自专栏程序员叨叨叨

一招搞定Windows无法安装到GPT分区形式磁盘疑难

今天给堂弟的电脑重装系统时,遇到了以往USB安装系统经常出现的问题,“Windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式”。之前在CSDN的博客上有...

692
来自专栏码生

mac python virtualenv 安装虚拟环境

主要是为了解决在同一个系统中存在多个项目的情况, 采用虚拟的方式,为每个项目创建各自的环境,使各个项目不会相互干扰

1382
来自专栏简单聊聊Spark

大数据在实际生产环境的前期准备

eg:  bigdata-cdh01.test.com. bigdata-cdh02.test.com. bigdata-cdh03.test.com

1053
来自专栏尚国

SELinux初学者指南

SELinux(Security Enhanced Linux)是美国国家安全局2000年发布的一种高级MAC(Mandatory Access Control...

1092
来自专栏云计算教程系列

如何在CentOS 7上编写自定义系统审计规则

Linux审计系统创建审计跟踪,这是一种跟踪系统上各种信息的方法。它可以记录大量数据,如事件类型,日期和时间,用户ID,系统调用,进程,使用的文件,SELinu...

4472
来自专栏鸿的学习笔记

日志采集技术笔记

使用Linux的rename机制保证文件写入要么成功,要么失败,绝对不能出现写了一半的情况。

2845
来自专栏Java技术分享

手把手教你用Mysql-Cluster-7.5搭建数据库集群

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负...

2548

扫码关注云+社区