crontab 周期性计划任务

cron是Linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

当需要周期性地重复执行任务时可以使用cron服务;该服务每分钟检查一次,并执行符合条件的任务。

Linux任务调度的工作主要分为两类:

1)系统执行的工作:系统周期性所要执行的工作,如备份系统数据,清理缓存。

2)个人执行的工作:某个用户定期要做的工作,例如每隔十分钟检查邮件服务是否有新信。

1、查看服务是否启动

# service crond status

/etc/init.d/crond status

2、查看相关文件列表
# which crontab

rpm -qf /usr/bin/crontab ----查看属于那个软件包

# rpm -ql crontabs ----查看软件包带来的文件

rpm -ql cronie

/var/spool/cron 用户级别的计划任务存放目录(以用户命名)

/etc/cron.deny

/etc/pam.d/crond

/etc/rc.d/init.d/crond 启动脚本

/usr/bin/crontab 用户级别的命令,系统级别计划任务通过修改配置文件来设置

/usr/sbin/crond 二进制的命令

/etc/cron.d/ ----里面通常存放用来设定除了每天/每周/每月之外的定时任务,比如说每小时周期执行的任务和其他任何定时任务。

/etc/cron.d/0hourly 系统每小时第一分钟需要执行的任务

/etc/cron.deny 用户拒绝列表(在该文件中的用户不能使用cron服务)
/etc/crontab 该文件的作用相当于/etc/cron.d/下面的某一个文件,可以定义系统计划任务

/var/spool/cron 这个目录用来存放各个用户自己设定的定时任务,普通用户没有权限直接访问,必须通过crontab 命令(setuid)

/etc/cron.monthly/ 存放系统每个月需要执行的脚本

/etc/cron.weekly/ 存放系统每周需要执行的脚本

/etc/cron.daily/ 存放系统每天需要执行的脚本

/etc/cron.hourly/ 存放系统每小时需要执行的脚本

3、 crontab 格式说明
# cat /etc/crontab 这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。

SHELL=/bin/bash                              默认的shell,告诉系统使用哪个shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin     定义命令的路径

MAILTO=root                                     命令的执行结果以邮件的形式发送给root(不管是标准正确还是错误结果),如果MAILTO=“” ,代表不会发邮件给任何人。

HOME=/                                            定义在执行命令或脚本时的主目录

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

分 时 日月 周

前5个字段分别表示:

分钟:0-59

小时:0-23

日期:1-31

月份:1-12

星期:0-7(0表示周日或者7表示周日)

还可以用一些特殊符号:
,: 表示分割,间隔。如第二个*表示成 8,10,就表示8点和10点
- :表示一个段,如第二个*表示成 1-5,就表示1到5点
/n : 表示每个n的单位执行一次,如第二个*表示成*/1, 就表示每隔1个小时执行一次命令。

* 8,10 * * *   --每天的8点和10点

* * 2-8 * *        --每月的2号到8号

*/5 * * * *         --每隔5分钟

00 8,10,12 * * 1,3    --周一和周三的8-12小时每隔2小时

00 8-12/2 * * 1,3           --周一和周三的8-12小时每隔2小时

每天1号到5号,10号到15号的每天凌晨4点8分

08 04 1-5,10-15 * *

以下4行是rhel5里的配置;rhell6看不到,但是也生效

01 * * * * root run-parts /etc/cron.hourly/            ----每小时的第一个分钟执行,可以把要执行的脚本文件放在同一目录下面

02 04 * * * root run-parts /etc/cron.daily/

22 04 * *7 root run-parts /etc/cron.weekly/

42 041** root run-parts /etc/cron.monthly/

错开执行时间,放置系统出现峰值

注意:

run-parts:


cron用这个工具来执行某个目录下所有的可执行脚本,定时任务中的每小时/每天/每周/每月任务就是通过这个工具来触发的。

通过修改配置文件制定计划任务:

/etc/cron.d/中的文件的范例:

# cat /etc/cron.d/0hourly

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

01 * * * * root run-parts /etc/cron.hourly

* * * * * 用户名 命令 脚本文件

run-parts /目录

可执行的脚本文件
没有权限解决办法:

方法1、用权限命令chmod +x

方法2、01 * * * * root bash(或者sh) run-parts /etc/cron.hourly

----bash解释器直接解释脚本文件

每小时的第一分钟,以root用户执行/etc/cron.hourly目录下的脚本

=====================================================

1、制定系统计划任务
方法一:自己编写计划任务文件
# crontab -e
--创建计划任务。如果有很多的话可以写在一起,如果要删除其中一条计划任务的话可以进去这里直接删除或者注释即可,默认是root用户创建的计划任务。

方法二:将自己的计划任务放到相应的系统任务目录里

系统自己的计划任务:/etc/cron.{daily,weekly,monthly}

----直接进去这个目录创建一个文件再创建周期计划

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

01 * * * * root run-parts /etc/cron.hourly

* * * * * 用户名 命令 脚本文件

run-parts

可执行的脚本文件

2、 设定用户级别的定时任务

相关命令:

普通用户编辑自己的定时任务
# crontab -e <--- 编辑当前用户自己的定时任务(使用环境变量EDITOR指定的默认编辑器)
#crontab -l
<--- 列出当前用户自己所有的定时任务
# crontab -r <--- 删除当前用户自己所有的定时任务,谨慎使用这个命令来删除计划任务。

一般是用crontab -e 进去把不想要的计划任务删除了
注意:用crontab -e 来创建计划任务wq保存退出后,在/var/spool/cron/下面可以看到相应的用户创建的计划任务,名字以创建计划任务的用户命名。

作为管理员,root可以设定/调整所有用户的定时任务,命令和上面类似,只是增加了一个-u <username> 的参数
# crontab -e -u redhat<--- 编辑指定用户(redhat)的定时任务(使用环境变量EDITOR指定的默认编辑器)
# crontab -l -u redhat<--- 列出指定用户所有的定时任务
# crontab -r -u redhat<--- 删除指定用户redhat所有的定时任务

说明:

1、crontab 默认调用的是vi编辑器,编辑计划任务的用法和vi一样。如果想自己定义编辑器,通过修改环境变量完成。如export EDITOR=vim

2、用户级别的任务定义当中,没有用户名那一栏,如果像定义系统级别的命令那样,输入用户名,crontab编辑器不会提示格式错误,但是任务不会得到正确的执行。

思考1:

如果系统断电或者宕机,错过任务执行的时间,怎么办?

可以使用anacron工具(下面介绍)。

=============================================================

anacron 任务:

是cron服务的扩展,配合cron服务一起使用,当系统断电或者宕机,错过任务执行的时间时,系统启动后它会再次执行未执行的任务。
配置文件:/etc/anacrontab

#period in days delay in minutes job-identifier command

命令执行的频率(天数) 延迟时间(分钟) 任务描述 要执行的命令

1 5 cron.daily nice run-parts /etc/cron.daily

7 25 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

说明:对于每个计划任务,anacrontab先判断在period(执行频率)期间内是否被执行了,如果没执行则等待delay(延迟时间),再次执行该任务。

一般情况下该文件不用修改,知道原理就可以。

总结:

1、如果你有很多任务需要每天|周|月重复执行,并且希望系统能自动把漏掉的任务补回来。那么你可以将你的脚本存放到系统相应的目录下面/etc/cron.{daily,weekly,monthly},并赋予可执行权限。

2、以上需要系统定时去调用的任务就叫系统级别的定时任务。

练习:通过至少两种方法指定一个周期性的计划任务

1、stu01 用户每周日和周三的凌晨5点04分在查看/etc/hosts 文件内容并保存到/tmp/stu01文件中:

方法1:

# crontab -e -u stu1

4 5 * * 3,7 cat /etc/hosts >> /tmp/stu01

方法2:
# vim /tmp/jihua.sh

cat /etc/hosts >> /tmp/stu01
# chmod o+w /tmp/stu01
# # crontab -e -u stu1

4 5 * * 3,7 bash /tmp/jihua.sh
查看日志:tail -f /var/log/cron ---- -f 动态查看
可能出现的问题:如果查看日志可以看到用户的计划任务已经执行,但是没看到产生的文件。
原因:/tmp 文件没有给用户写的权限
解决:chmod o+w /tmp

2、root用户往/tmp/stu01/的文件里每隔2分钟追加当前的系统时间
# crontab -e

*/2 * * * * echo `date` >> /tmp/stu01

=========================================================

cron使用限制


/etc/cron.deny ——只拒绝哪些用户不能他用crontab,默认存在空文件

/etc/cron.allow ——允许哪些用户使用crontab

如果同一个用户即在拒绝里又在允许里,默认允许优先。

思考2

如果我用crontab -e写了晚上8:30去关机,但是我18点下课就手动关机了,第二天来9点开机,它会不会延迟一段时间又关机呢?

不会。只有在/etc/cron week daily 这类的文件里写的任务才会补救任务,其余方法(crontap)不会自动补救

Linux利用crontab创建计划任务详解的更多相关文章

  1. Linux中利用crontab创建计划任务

    在linux中启动crontab服务: /etc/init.d/crond  start crontab的命令格式 crontab -l   显示当前的crontab 文件(默认编写的crontab文 ...

  2. linux下crontab实现定时服务详解

    http://www.jb51.net/LINUXjishu/151805.html 任务调度的crond常驻命令 crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动 ...

  3. Centos 7下利用crontab定时执行任务详解

    一 cron服务 cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond ...

  4. 【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...

  5. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)

    Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据, ...

  6. Linux实现利用SSH远程登录服务器详解

    Linux实现利用SSH远程登录服务器详解 http://www.111cn.net/sys/linux/55152.htm

  7. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  8. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  9. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

随机推荐

  1. Python基础练习之购物车

    #前置知识点 # enumerate(LIST) # 输出一个元组,第一个为下标,第二个为元素 # a = [1, 2, 3, 4] # for i in enumerate(a): # print( ...

  2. .NET Core剪裁器Zack.DotNetTrimmer升级瘦身引擎,并支持剪裁计划的录制和回放

    上周,我发布了对.NET Core程序进行瘦身的开源软件Zack.DotNetTrimmer,与.NET Core内置的剪裁器相比,Zack.DotNetTrimmer不仅对程序的剪裁效果更好,而且还 ...

  3. 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)

    1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...

  4. Java将彩色PDF转为灰度

    本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面 ...

  5. 内网代理工具--reGeorg

    一.简介 reGeorg是reDuh的继承者,利用了会话层的socks5协议,效率更高结合Proxifier使用 Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工 ...

  6. DDOS防御实验----反射器的安全配置

    0x01 环境 共包含三台主机 一台centos7.3 为attact主机,装有python +Scapy 一台centos7.3,server,装有bind9 ntp memcached,作为DDO ...

  7. 航模电池平衡头接线,1S-6S原理图

    1-4S平衡头接线 S数代表几级锂电池串联,比如3S代表串联了3级,所以总电压为3*3.7V=11.4V.(每一级可能是多个电芯并联) 图源:百度贴吧 图源:5imx论坛 3S电池示例 B6充电器

  8. Go 语言 切片的使用(增删改查)

    Go 语言 切片的使用(增删改查) 引言Golang 的数组是固定长度,可以容纳相同数据类型的元素的集合.但是当长度固定了,在使用的时候肯定是会带来一些限制,比如说:申请的长度太大会浪费内存,太小又不 ...

  9. 测试odbc连接sqlsever数据库是否成功的代码

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 #include<sql.h ...

  10. ubuntu16 和ubuntu18安装及设置静态ip

    1.准备ubuntu16镜像2.安装:https://zhuanlan.zhihu.com/p/1447048653.安装ubuntu后,sudo passwd root这个命令建立root用户的密码 ...