[RHEL7基础篇-16] Linux中的crontab和at

[RHEL7基础篇-16] Linux中的crontab和at

简介

服务管理

用户crontab

衍生问题

系统crontab

一次性任务at

练习

简介

        在Linux中,crontab和at是两种常用的任务调度工具。crontab:crontab是一种用于定期执行任务的工具。at是一种用于单次执行任务的工具。需要注意crontab和at的时间设定格式略有不同,下面我们一起来学习一下Linux中的crontab和at。

服务管理

1、crontab的服务管理

RHEL5、RHEL6版本只可以使用该命令
> service crond {start|stop|status|reload|restart}  

RHEL7版本使用该命令
> systemctl restart/start/stop/status/reload  crond.service

2、at的服务管理

RHEL5、RHEL6版本只可以使用该命令
> service atd {start|stop|status|reload|restart}  

RHEL7版本使用该命令
> systemctl restart/start/stop/status/reload  atd.service

命令使用如下图所示

 

用户crontab

一、常见的一些实用命令

设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
> crontab -u

列出某个用户cron服务的详细内容
> crontab -l

删除某个用户的cron服务
> crontab -r

编辑某个用户的cron服务
> crontab -e

二、allow和deny

1、哪些人可以使用crontab

> vim /etc/cron.allow # 一行为一个用户,直接写用户名即可,在里头的用户被允许,不在的被拒绝

2、哪些人不可以使用crontab

> vim /etc//cron.deny # 在里头的用户被拒绝,不在的被允许

 allow的优先级比deny来的高,在系统中只要有一个文件存在即可,两个都不存在时,只有root可用crontab

三、crontab文件内容

列数定义
第1列表示分钟,1~59 (每分钟用*或者 */1表示,0表示0分)
第2列表示小时,1~23(0表示0点)
第3列表示日期,1~31(1表示每个月的1号,*表示任意这个月内任意一天)
第4列表示月份,1~12(1表示每年的1月,*表示任意一个月)
第5列标识号星期0~7(0和7表示星期天)
第6列要运行的命令

 四、crontab日志与备份

1、crontab的日志目录

        总有人质疑你的crontab中的脚本是否在运行,这个时候就要看看是否有最新的日志生成就能知道了

我们需要从/var/log/cron确认
> cd /var/log/cron # cron为日志文件,如果有多个crontab在运行则会生成多个cron文件,如:cron    cron.1  cron.2  cron.3  cron.4

         cron日志文件会记录该crontab执行的命令和时间,根据该日志可以推断出所配置的crontab的参数,从而恢复丢失的crontab,但如果周期过长则可能无法恢复,这时候我们就要即使采取备份措施

备份措施如下:
使用的crontab备份,备份文件/var/spool/cron/用户名
> crontab -e
    0 0 * * 1 crontab -l > /var/spool/cron/root # 每周一把crontab -l的内容输入到/var/spool/cron/root中

衍生问题

        在生产环境中有时,需要更短的周期,比如每隔几秒,甚至更短,而我们crontab运行周期的最小单位为一分钟。在我们的生产环境中,一个mysql集群由于要比较及时知道节点DB的健康状况,我们就是要求要每过5秒钟就要汇总一下信息,以便将不健康的节点DB踢出集群,同时将业务查询分配给健康的节点DB!

        这个时候就需要Shell脚本使用了

#!/bin/bash
while [1 != 0] # 做的是一个无限的while循环
do
    echo "###########" >>/tmp/123 # 把###########输入到/tmp/123中
    sleep 0.5 # 休眠0.5秒
    date >>/tmp/123 # 把当前时间输入到/tmp/123中
done

#!/bin/bash
while [1 != 0]
do
    echo "###########" >>/tmp/123 # 把###########输入到/tmp/123中
    sleep 1 # 休眠1秒
    date >>/tmp/123 # 把当前时间输入到/tmp/123中
done

        可以观察到这123这个文件中出现相同时间出现的次数(sleep 0.5的相同秒数会出现2个,sleep 1的相同秒数只有一个),在死循环中  要记得sleep,要不然机器负载会跑的很高的负载,
最后down机!

系统crontab

        系统的crontab所在位置为/etc/crontab,内容如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly     # 每个小时
02 4 * * * root run-parts /etc/cron.daily      # 每天
22 4 * * 0 root run-parts /etc/cron.weekly     # 每个星期
42 4 1 * * root run-parts /etc/cron.monthly    # 每个月

        下面这些脚本当中,就有我们会提到的系统日志轮转功能 

> vim /etc/cron.daily/mlocate.cron # locate查找文件,其配置文件/etc/updatedb.conf,每天运行后,会放入/var/lib/mlocate/mlocate.db
    echo "DAILY_UPDATE=no" >> /etc/updatedb.conf

 

一次性任务at

        使用at前一定要先启动atd服务,请看本节的服务管理

at [-option] 时间格式

         常用的参数选项

选项定义
-m若at内的shell命令没有任何输入信息,也发送email给at任务使用者
-l查看当前的队列,相当于atq
-d取消正在at队列中的一项任务,相当于atrm
-v可以使用较明显的时间格式列出at计划中的任务列表
-c后面跟任务编号,列出该任务的内容

        时间格式的几种表达

 

代码定义
HH:MM小时:分钟
HH:MM  YYYY-MM-DD小时:分钟 年:月:日
HH:MM[am/pm]  [Month]  [Date]小时:分钟[上午/下午] [月] [日]
HH:MM[am/pm]  + number  [minuter/hours/days/weeks]小时:分钟[上午/下午] + 时间(即在某个时间点之后再过多久才执行)
now表示现在的时间

        效果演示 

> date
> cat /tmp/test_at
> at now +2 minutes # +2 (minutes,hours,days,weeks)  可以是分、时、日、周
    at> date >> /tmp/test_at
    at> <EOT> # 中间在输入完要执行的脚本后,以Ctrl+D的形式,结束编辑
> atq # 查看当前的队列
> date
> cat /tmp/test_at
> atrm 1# 指的是job序列号,atq用来查看目前的队列,下图中atq的第一列即为job序列号

 

注:避开白天时候的高峰进行作业,例如数据的迁移,他只要一次运行即可了,而且是在将来的某一时刻开启运行即可,写在crontab中明显不合适,有时会忘记了删掉crontab,导致他第二次运行,这是我们所不希望看到的!

练习

1、 root用户每周一4,5,6,8点00分 运行date >>/tmp/dbrecover.log

2、新建一个用户cronuser,写入/etc/cron.allow  和/etc/cron.deny文件中,则该用户能否编写1中的crontab任务

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JovaZou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值