教你们学习一个最简单又企业最需要的服务-crond

 

13 定时任务的介绍

13.1 定时任务的分类

13.1.1 系统实现定时任务的配置

[root@oldboyedu ~] # cd /etc/cron.

cron.d/ cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/

[root@oldboyedu ~] # cd /etc/cron.

cron.daily                        每天定时执行同步任务

cron.hourly                        每小时定时执行同步任务

cron.monthly                        每个月定时执行同步任务

cron.weekly                        每星期定时执行同步任务

cron.deny                            限制哪些用户不可以使用定时任务进行配置

13.1.2 用户自定义定时任务的配置(-个命令,俩个文件)

13.3.1.1 一个命令

crontab -l:查看配置的定时任务

[root@oldboyedu ~] # crontab -l

30 2 * * * cp -rf /etc/hosts /etc/hosts.bak

[root@oldboyedu ~] #

crontab -e:编写定时任务

[root@oldboyedu ~] # crontab -e

no crontab for root - using an empty one

30 2 * * *

crontab -r:清空定时任务配置的任务信息

[root@oldboyedu ~] # crontab -l 查看定时任务信息

#30 */1 * * * cp /etc/hosts /etc/hosts_lyx.bak

#*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

#*/5 * * * * sh /server/scripts/ntpdate_sync.sh & > /dev/null

#* * * * * tar zcvf /opt/hosts_$(date +\%F).tar.gz /etc/hosts

#* * * * * sh /server/scripts/tar_sync.sh & >/dev/null

[root@oldboyedu ~] # crontab -r 清除定时任务信息

[root@oldboyedu ~] # crontab -l 再次查看发现已经没有信息

no crontab for root

[root@oldboyedu ~] #

13.1.1.2 俩个文件

13.1.1.2.1 root用户设置定时任务的配置文件

[root@oldboyedu ~] # ll /var/spool/cron/root root用户设置定时任务的配置文件

 

-rw------- 1 root root 44 Oct 2 15:25 /var/spool/cron/root

[root@oldboyedu ~] #

13.1.1.2.2 root用户定时任务的日志文件

[root@oldboyedu ~] # tail -f /var/log/cron root用户定时任务的日志文件

Oct 2 19:30:01 oldboyedu CROND[8172]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 2 19:40:01 oldboyedu CROND[8258]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 2 19:50:01 oldboyedu CROND[8345]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 2 20:00:01 oldboyedu CROND[8431]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 2 20:01:02 oldboyedu CROND[8444]: (root) CMD (run-parts /etc/cron.hourly)

Oct 2 20:01:02 oldboyedu run-parts(/etc/cron.hourly)[8444]: starting 0anacron

Oct 2 20:01:02 oldboyedu run-parts(/etc/cron.hourly)[8453]: finished 0anacron

 

  • Oct 2 20:01:02                                    产生定时任务信息的时间
  • oldboyedu                                         用户主机名
  • run-parts(/etc/cron.hourly)[8453]                        读取什么定时任务信息
  • finished 0anacron                                    具体执行的任务

 

13.1.3 定时任务atd的描述(此了解即可)

atd每天只能执行at命令一次,不能循环使用

13.2 定时任务的表示方式

13.2.1 书写方式

* * * * * 接文件和脚本

13.2.2 每个*号代表的意思

第一个*                                    分(0-59)            (每分钟)

第二个*                                    小时(0-23)        (每小时)

第三个*                                    天数(1-31)        (每天)

第四个*                                    月数(1-12)        (每月)

第五个*                                    周数(0-6)            (每周)

警告:天数和周数不能同时指定

13.2.3 例子

  • 5 * * * * 指定每小时的第5分钟执行一次
  • 30 5 * * * 指定每天的 5:30 执行
  • 30 7 8 * * 指定每月8号的7:30分执行
  • 30 5 8 6 * 指定每年的6月8日5:30执行
  • 30 6 * * 0 指定每星期日的6:30执行[注:0表示星期天,1表示星期1,

    以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。

  • 30 3 10,20 * * 每月10号及20号的3:30执行[注:","用来连接多个不连续的时段
  • 25 8-11 * * * 每天8-11点的第25分钟执行[注:"-"用来连接连续的时段
  • */15 * * * * 每15分钟执行一次 [即每个小时的第0 15 30 45 60分钟执行
  • 30 6 */10 * * 每个月中,每隔10天6:30执行一次[即每月的1、11、21、31日是的6:30执行一次

 

13.3 定时任务常见的几种表示方法

*/n                                        表示出现n的倍数/小时/天/月/周

n-m                                        表示在n-m的时间段内进行备份

n,m                                        表示在n和m的时间段内进行备份

n-m/2                                    表示在n-m时间段内每隔2个小时进行备份

13.3.1 230分的时候备份/etc/hosts文件

13.3.1.1 编写定时任务配置

[root@oldboyedu ~] # crontab -l

30 2 * * * cp /etc/hosts /etc/hosts_lyx.bak

[root@oldboyedu ~] #

13.3.1.2 修改时间为20191003 2:29:40

[root@oldboyedu ~] # date -s "20191003 2:29:40"

Thu Oct 3 02:29:40 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 02:29:42 CST 2019

13.3.1.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron 查看定时任务日志

Oct 2 21:03:23 oldboyedu crontab[9129]: (root) REPLACE (root)

Oct 2 21:03:23 oldboyedu crontab[9129]: (root) END EDIT (root)

Oct 3 02:30:21 oldboyedu crontab[9180]: (root) LIST (root)

Oct 3 02:30:27 oldboyedu CROND[9183]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 3 02:30:27 oldboyedu CROND[9184]: (root) CMD (cp /etc/hosts /etc/hosts_lyx.bak)

13.3.1.4 查看配置是否成功

[root@oldboyedu ~] # ll /etc/hosts_lyx.bak 备份成功

-rw-r--r-- 1 root root 158 Oct 3 02:30 /etc/hosts_lyx.bak

[root@oldboyedu ~] #

13.3.2 每小时的第30分钟进行备份文件/etc/hosts文件

13.3.2.1 编写定时任务配置

[root@oldboyedu ~] # crontab -e

30 */1 * * * cp /etc/hosts /etc/hosts_lyx.bak

13.3.2.2 修改时间

[root@oldboyedu ~] # date -s "20191003 9:29:50" 修改时间为92940

Thu Oct 3 09:29:50 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 09:29:52 CST 2019

13.3.2.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron 查看日志备份成功

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) REPLACE (root)

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) END EDIT (root)

Oct 3 02:38:01 oldboyedu crond[1269]: (root) RELOAD (/var/spool/cron/root)

Oct 3 09:30:27 oldboyedu CROND[9296]: (root) CMD (cp /etc/hosts /etc/hosts_lyx.bak)

Oct 3 09:30:27 oldboyedu CROND[9297]: (root) CMD (/usr/lib64/sa/sa1 1 1)

13.3.2.4 查看配置是否成功

[root@oldboyedu ~] # ll /etc/hosts_lyx.bak

-rw-r--r-- 1 root root 158 Oct 3 09:30 /etc/hosts_lyx.bak

[root@oldboyedu ~] #

13.3.3 在每天的9,10.11点的30分钟的时候进行文件/etc/hosts文件备份

13.3.3.1 编写定时任务配置

[root@oldboyedu ~] # crontab -e

30 9-11 * * * cp /etc/hosts /etc/hosts_lyx.bak

13.3.3.2 修改时间

[root@oldboyedu ~] # date -s "20191003 9:29:50" 修改时间为92940

Thu Oct 3 09:29:50 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 09:29:52 CST 2019

13.3.3.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron 查看日志备份成功

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) REPLACE (root)

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) END EDIT (root)

Oct 3 02:38:01 oldboyedu crond[1269]: (root) RELOAD (/var/spool/cron/root)

Oct 3 09:30:27 oldboyedu CROND[9296]: (root) CMD (cp /etc/hosts /etc/hosts_lyx.bak)

Oct 3 09:30:27 oldboyedu CROND[9297]: (root) CMD (/usr/lib64/sa/sa1 1 1)

13.3.3.4 查看配置是否成功

[root@oldboyedu ~] # ll /etc/hosts_lyx.bak

-rw-r--r-- 1 root root 158 Oct 3 09:30 /etc/hosts_lyx.bak

[root@oldboyedu ~] #

 

13.3.4 下午340,86,周日将数据进行备份

错误,这种写法错误

在定时任务的配置中,不能将日期和周进行同时配置

13.3.5 在每天的9,11点的30分进行数据的备份

13.3.5.1 编写定时任务配置

[root@oldboyedu ~] # crontab -e

30 9,11 * * * cp /etc/hosts /etc/hosts_lyx.bak

13.3.3.2 修改时间

[root@oldboyedu ~] # date -s "20191003 9:29:50" 修改时间为92940

Thu Oct 3 09:29:50 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 09:29:52 CST 2019

13.3.3.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron 查看日志备份成功

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) REPLACE (root)

Oct 3 02:37:47 oldboyedu crontab[9242]: (root) END EDIT (root)

Oct 3 02:38:01 oldboyedu crond[1269]: (root) RELOAD (/var/spool/cron/root)

Oct 3 09:30:27 oldboyedu CROND[9296]: (root) CMD (cp /etc/hosts /etc/hosts_lyx.bak)

Oct 3 09:30:27 oldboyedu CROND[9297]: (root) CMD (/usr/lib64/sa/sa1 1 1)

13.3.3.4 查看配置是否成功

[root@oldboyedu ~] # ll /etc/hosts_lyx.bak

-rw-r--r-- 1 root root 158 Oct 3 09:30 /etc/hosts_lyx.bak

[root@oldboyedu ~] #

 

 

13.4 定时任务常见的问题

13.4.1 每隔5分钟进行时间的同步(采用绝对路径)

13.4.1.1 错误示范

13.4.1.1.1 配置定时任务

[root@oldboyedu ~] # crontab -l

*/5 * * * * ntpdate ntp1.aliyun.com

You have new mail in /var/spool/mail/root

[root@oldboyedu ~] #

13.4.1.1.2 修改时间

[root@oldboyedu ~] # date -s "20191003 9:49:50"

Thu Oct 3 09:49:50 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 09:49:51 CST 2019

13.4.1.1.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron

Oct 3 09:45:12 oldboyedu crontab[9480]: (root) REPLACE (root)

Oct 3 09:45:12 oldboyedu crontab[9480]: (root) END EDIT (root)

 

Oct 3 09:50:12 oldboyedu crond[1269]: (root) RELOAD (/var/spool/cron/root)

Oct 3 09:50:12 oldboyedu CROND[9502]: (root) CMD (ntpdate ntp1.aliyun.com)

Oct 3 09:50:12 oldboyedu CROND[9503]: (root) CMD (/usr/lib64/sa/sa1 1 1)

13.4.1.1.4 查看配置是否成功

[root@oldboyedu ~] # date

Thu Oct 3 09:50:31 CST 2019

[root@oldboyedu ~] #

结论;这样配置出来的时间没有进行同步

13.4.1.2 正确示范

利用命令的绝对路径来备份

13.4.1.2.1 采用绝对路径进行编写

[root@oldboyedu ~] # crontab -l

*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

 

13.4.1.2.2 修改时间

[root@oldboyedu ~] # date -s "20191003 9:29:50"

Thu Oct 3 09:29:50 CST 2019

[root@oldboyedu ~] # date

Thu Oct 3 09:29:51 CST 2019

13.4.1.2.3 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron

Oct 3 09:57:21 oldboyedu crontab[9585]: (root) REPLACE (root)

Oct 3 09:57:21 oldboyedu crontab[9585]: (root) END EDIT (root)

Oct 3 09:29:59 oldboyedu crond[1269]: (root) RELOAD (/var/spool/cron/root)

Oct 3 09:30:01 oldboyedu CROND[9644]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 3 09:30:01 oldboyedu CROND[9645]: (root) CMD (/usr/sbin/ntpdate ntp1.aliyun.com)

 

13.4.1.2.4 查看更新是否成功

[root@oldboyedu ~] # date

Wed Oct 2 21:40:43 CST 2019 更新成功

[root@oldboyedu ~] #

脚本完成

13.4.1.2.5 编写脚本

[root@oldboyedu ~] # cat /server/scripts/ntpdate_sync.sh 编写ntpdate_sync.sh脚本

#!/bin/bash

 

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

echo $PATH &>/tmp/oldboy.txt

ntpdate ntp1.aliyun.com

[root@oldboyedu ~] #

13.4.1.2.6 配置定时任务

[root@oldboyedu ~] # crontab -e

*/5 * * * * sh /server/scripts/ntpdate_sync.sh 将脚本配置到定时任务里面

13.4.1.2.7 修改时间

[root@oldboyedu ~] # date -s "20191004 11:00:40" 将时间修改为201910411

Fri Oct 4 11:00:40 CST 2019

[root@oldboyedu ~] # date

Fri Oct 4 11:00:41 CST 2019

[root@oldboyedu ~] # date

Fri Oct 4 11:00:42 CST 2019

13.4.1.2.8 查看日志

[root@oldboyedu ~] # tail -f /var/log/cron 查看日志发现脚本已经触发

Oct 3 10:56:46 oldboyedu crontab[2211]: (root) REPLACE (root)

Oct 3 10:56:46 oldboyedu crontab[2211]: (root) END EDIT (root)

Oct 3 10:57:01 oldboyedu crond[1365]: (root) RELOAD (/var/spool/cron/root)

Oct 4 11:01:24 oldboyedu CROND[2386]: (root) CMD (run-parts /etc/cron.hourly)

Oct 4 11:01:24 oldboyedu run-parts(/etc/cron.hourly)[2386]: starting 0anacron

Oct 4 11:01:24 oldboyedu anacron[2398]: Anacron started on 2019-10-04

Oct 4 11:01:24 oldboyedu run-parts(/etc/cron.hourly)[2400]: finished 0anacron

Oct 4 11:01:24 oldboyedu anacron[2398]: Will run job `cron.daily' in 37 min.

Oct 4 11:01:24 oldboyedu anacron[2398]: Jobs will be executed sequentially

Oct 4 11:00:44 oldboyedu CROND[2492]: (root) CMD (sh /server/scripts/ntpdate_sync.sh)

Oct 4 11:00:44 oldboyedu CROND[2494]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 3 11:00:01 oldboyedu CROND[2520]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Oct 3 11:00:01 oldboyedu CROND[2523]: (root) CMD (sh /server/scripts/ntpdate_sync.sh)

13.4.1.2.9 查看是否执行成功

[root@oldboyedu ~] # date

Fri Oct 4 11:00:42 CST 2019

[root@oldboyedu ~] # date 发现时间已经修改为正确的时间

Thu Oct 3 10:59:55 CST 2019

 

[root@oldboyedu ~] # ll /tmp/oldboy.txt

-rw-r--r-- 1 root root 60 Oct 3 11:00 /tmp/oldboy.txt

[root@oldboyedu ~] # cat /tmp/oldboy.txt 环境变量也同步成功

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@oldboyedu ~] #

13.4.2 规范化的编写定时任务(将输出信息放入黑洞)

13.4.2.1 定时任务执行错误与正确的结果显示在哪里

13.4.2.1.1 postfix服务关闭的时候(inode会占用更多的)

[root@oldboyedu maildrop] # cd /var/spool/postfix/maildrop/ 定时任务会存在这个文件里面

[root@oldboyedu maildrop] # ll

total 8

-rwxr--r-- 1 root postdrop 608 Oct 3 11:19 1C423B3260

-rwxr--r-- 1 root postdrop 608 Oct 3 11:18 CA426B2D3C

13.4.2.1.2 postfix服务开启的时候(block会占用更多的)

[root@oldboyedu maildrop] # cat /var/spool/mail/root 定时任务会存在这个文件里面

From user@localhost.localdomain Mon Sep 23 22:43:29 2019

Return-Path: user@localhost.localdomain

最合理的做法

13.4.2.1.3 使用黑洞来保存输出内容的信息

[root@oldboyedu ~] # crontab -e

*/5 * * * * sh /server/scripts/ntpdate_sync.sh & > /dev/null 将内容输出到黑洞中

13.4.3 编写任务时候的特殊符号(特殊符号无法识别使用\来进行转义)

13.4.3.1 错误示范

13.4.3.1.1 编写定时任务

[root@oldboyedu ~] # crontab -e

* * * * * tar zcvf /opt/hosts_$(date +%F).tar.gz /etc/hosts 编写打包定时任务

13.4.3.1.2 查看日志

[root@oldboyedu maildrop] # tail -f /var/log//cron

查看定时任务日志,发现命令打包出错,不识别+号后面的字符

Oct 3 11:26:40 oldboyedu crontab[3053]: (root) REPLACE (root)

Oct 3 11:26:40 oldboyedu crontab[3053]: (root) END EDIT (root)

Oct 3 11:27:01 oldboyedu crond[1365]: (root) RELOAD (/var/spool/cron/root)

Oct 3 11:27:01 oldboyedu CROND[3122]: (root) CMD (tar zcvf /opt/hosts_$(date +)

13.4.3.2 正确示范

13.4.3.2.1 使用转义符号进行编写

[root@oldboyedu ~] # crontab -e

#30 */1 * * * cp /etc/hosts /etc/hosts_lyx.bak

#*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

#*/5 * * * * sh /server/scripts/ntpdate_sync.sh & > /dev/null

* * * * * tar zcvf /opt/hosts_$(date +\%F).tar.gz /etc/hosts 添加转义符号

13.4.3.2.2 查看日志

[root@oldboyedu maildrop] # tail -f /var/log//cron 日志已经备份成功

Oct 3 11:32:09 oldboyedu crontab[3189]: (root) REPLACE (root)

Oct 3 11:32:09 oldboyedu crontab[3189]: (root) END EDIT (root)

Oct 3 11:33:01 oldboyedu crond[1365]: (root) RELOAD (/var/spool/cron/root)

Oct 3 11:33:01 oldboyedu CROND[3201]: (root) CMD (tar zcvf /opt/hosts_$(date +%F).tar.gz /etc/hosts)

13.4.3.2.3 查看备份是否真的成功

[root@oldboyedu ~] # ll /opt/

total 4

drwxr-xr-x. 2 root root 6 Sep 6 16:53 1.txt

-rw-r--r--. 1 root root 0 Sep 7 10:33 aa.txt

-rw-r--r-- 1 root root 170 Oct 3 11:33 hosts_2019-10-03.tar.gz 备份成功

drwxr-xr-x 2 root root 6 Oct 31 2018 rh

[root@oldboyedu ~] #

13.4.3.2.4 .使用脚本进行编写

[root@oldboyedu ~] # cat /server/scripts/tar_sync.sh

#!/bin/bash

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

tar zcvf /opt/hosts_$(date +\%F).tar.gz /etc/hosts

[root@oldboyedu ~] #

13.4.3.2.5 编写定时任务

[root@oldboyedu ~] # crontab -e 定时任务编写

* * * * * sh /server/scripts/tar_sync.sh & >/dev/null

13.4.3.2.6 查看日志

Oct 3 11:40:27 oldboyedu crontab[3410]: (root) REPLACE (root)

Oct 3 11:40:27 oldboyedu crontab[3410]: (root) END EDIT (root)

Oct 3 11:41:01 oldboyedu crond[1365]: (root) RELOAD (/var/spool/cron/root)

Oct 3 11:41:01 oldboyedu CROND[3444]: (root) CMD (sh /server/scripts/tar_sync.sh & >/dev/null)

日志中查看脚本执行成功

13.4.3.2.7 查看真实是否打包成功

[root@oldboyedu maildrop] # ll /opt/

total 4

drwxr-xr-x. 2 root root 6 Sep 6 16:53 1.txt

-rw-r--r--. 1 root root 0 Sep 7 10:33 aa.txt

-rw-r--r-- 1 root root 170 Oct 3 11:41 hosts_2019-10-03.tar.gz 已经打包成功

drwxr-xr-x 2 root root 6 Oct 31 2018 rh

[root@oldboyedu maildrop] #

13.4.4 定时任务编写的注意事项

  • (1). 编写定时任务需要有注释信息 (时间 编写人员 任务作用)
  • (2). 编写定时任务注意环境变量 /usr/bin:/bin 命令书写为绝对路径
  • (3). 编写定时任务注意特殊符号 需要标记转义符号 \
  • (4). 编写定时任务需要将输出信息定义到空 &>/dev/null
  • (5). 编写定时任务建议使用脚本编写

13.4.5 编写定时任务错误表示方法(定时任务编写方式错误)

13.4.5.1 错误书写方式

4/2 * * * * cp /etc/hosts /etc/hosts_$(date +\%F-\%T) 4/2这种写法是无法保存成功的,格式书写错误

 

 

"/tmp/crontab.JQwB8M" 14L, 352C written

crontab: installing new crontab

"/tmp/crontab.JQwB8M":13: bad minute

errors in crontab file, can't install.

Do you want to retry the same edit?

13.4.5.2 编写定时任务正确的表示方法

4-59/2 * * * * cp /etc/hosts /etc/hosts_$(date +\%F-\%T)

 

13.5 定时任务编写时候的规范

13.5.1 命令编写定时任务时候的注意事项

  • 测试命令是否可以在命令行执行    
  • 放入定时任务中(绝对路径)
  • 调整时间信息进行测试
  • 检查日志信息/检查任务执行结果

    

13.5.2 脚本编写定时任务时候的注意事项

  • 编写脚本信息
  • 测试脚本执行效果(/bin/sh /server/scripts/ntpdate_sync.sh)
  • 放入定时任务中(绝对路径)    
  • 调整时间信息进行测试
  • 检查日志信息/检查任务执行结果

 

posted @ 2019-11-30 15:43  HXX-LYX  阅读(373)  评论(0编辑  收藏  举报