Linux利用crontab创建计划任务详解
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创建计划任务详解的更多相关文章
- Linux中利用crontab创建计划任务
在linux中启动crontab服务: /etc/init.d/crond start crontab的命令格式 crontab -l 显示当前的crontab 文件(默认编写的crontab文 ...
- linux下crontab实现定时服务详解
http://www.jb51.net/LINUXjishu/151805.html 任务调度的crond常驻命令 crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动 ...
- Centos 7下利用crontab定时执行任务详解
一 cron服务 cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond ...
- 【Python】Linux crontab定时任务配置方法(详解)
CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...
- Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据, ...
- Linux实现利用SSH远程登录服务器详解
Linux实现利用SSH远程登录服务器详解 http://www.111cn.net/sys/linux/55152.htm
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
随机推荐
- 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- vue项目部署到阿里云服务器(windows),Nginx代理!
项目构成: 前端:vue+vant-ui, 数据库:mysql, 后端:node.js 部署方式:nginx代理: 一,首先要拥有自己的服务器,阿里,腾讯都可以,我用的是阿里的: 如果只是做个人项目的 ...
- linux指令_张三
1.基础指令语法 ls (路径) 含义:列出当前工作目录下的所有文件/文件夹的名称 pwd(printworkingdirectory,打印当前工作目录) cd (路径) 作用:用于切换当 ...
- CSS性能优化的几个技巧
前言 随着互联网发展至今,对于网站来说,性能显的越来越重要了,CSS作为页面渲染和内容展现的重要环节,影响着用户对整个网站的第一体验.所以,我们需要重视与CSS相关的性能优化. 项目开发初期我们可能因 ...
- 《前端运维》一、Linux基础--06Shell流程控制
这章我们来学习下流程控制,简单来说就是逻辑判断和循环的写法.并不复杂,我们来简单地看下. 1.if语句 shell的if语句有两种写法,一种是shell脚本式的,一种是命令式的. if conditi ...
- VT 入门番外篇——初识 VT
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 通过rem自适应屏幕尺寸
通过rem自适应屏幕尺寸 常用的前端单位 px px就是pixel的缩写,设备分辨率,物理像素 pt pt就是point的缩写,逻辑分辨率,逻辑像素 em 参考物是父元素的font-size,具有继承 ...
- grafana初级入门
grafana初级入门 预备知识 Metrics.Tracing和Logging的区别 监控.链路追踪及日志作为实时监测系统运行状况,这三个领域都有对应的工具和解决方案. Metrics 监控指标的定 ...
- C++多态例子_虚函数
#include<iostream> using namespace std; class parent { public: virtual void fun() { cout <& ...
- Dubbo 如何停机?
Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才 会执行.