Linux/UNIX 定时任务 cron 详解
定时任务( job)被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/目录。它同样也会检查 /var/spool/cron/ 目录。
crontab 命令
crontab 是用来安装、卸载或者列出定时任务列表的命令。cron 配置文件则用于驱动 Vixie Cron 的 守护进程。每个用户都可以拥有自己的 crontab 文件,虽然这些文件都位于 1202.www.qixoo.qixoo.com/var/spool/cron/crontabs 目录中,但并不意味着你可以直接编辑它们。你需要通过 crontab 命令来编辑或者配置你自己的定时任务。
定时配置文件的类型
配置文件分为以下不同的类型:
UNIX 或 Linux 的系统级 crontab : 此类型通常由那些需要 root 或类似权限的系统服务和重要任务使用。第六个字段(见下方的字段介绍)为用户名,用来指定此命令以哪个用户身份来执行。如此一来,系统的 crontab 就能够以任意用户的身份来执行操作。
用户的 crontab: 用户可以使用 crontab 命令来安装属于他们自己的定时任务。 第六个字段为需要运行的命令, 所有的命令都会以创建该 crontab 任务的用户的身份运行。
注意: 这种问答形式的 Cron 实现由 Paul Vixie 编写而成,并且被包含在许多 Linux 发行版本和类 Unix 系统(如广受欢迎的第四版 BSD)中。它的语法被各种 crond 的实现所兼容。
那么我该如何安装、创建或者编辑我自己的定时任务呢?
要编辑你的 crontab 文件,需要在 Linux 或 Unix 的 shell 提示符后键入以下命令:
$ crontab -e
crontab 语法(字段介绍)
语法为:
1 2 3 4 5 qkxue.net/path/to/command arg1 arg2
或者
1 2 3 4 5 /root/ntp_sync.sh
其中:
第1个字段:分钟 (0-59)
第2个字段:小时 (0-23)
第3个字段:日期 (0-31)
第4个字段:月份 (0-12 [12 代表 December])
第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
/path/to/command – 计划执行的脚本或命令的名称
便于记忆的格式:
* * * * * 要执行的命令
----------------| | | | |
| | | | ---- 周当中的某天 (0 - 7) (周日为 0 或 7)
| | | ------ 月份 (1 - 12)| | -------- 一月当中的某天 (1 - 31)| ---------- 小时 (0 - 23)
------------ 分钟 (0 - 59)
简单的 crontab 示例:
### 每隔 5 分钟运行一次 backupscript 脚本 ##*/5 * * * * /root/backupscript.sh### 每天的凌晨 1 点运行 backupscript 脚本 ##0 1 * * * /root/backupscript.sh### 每月的第一个凌晨 3:15 运行 backupscript 脚本 ##15 3 1 * * /root/backupscript.sh
如何使用操作符
操作符允许你为一个字段指定多个值,这里有三个操作符可供使用:
星号 (*) : 此操作符为字段指定所有可用的值。举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。
逗号 (,) : 这个操作符指定了一个包含多个值的列表,例如:1,5,10,15,20,25.
横杠 (-) : 此操作符指定了一个值的范围,例如:5-15 ,等同于使用逗号操作符键入的 5,6,7,8,9,…,13,14,15。
分隔符 (/) : 此操作符指定了一个步进值,例如: 0-23/ 可以用于小时字段来指定某个命令每小时被执行一次。步进值也可以跟在星号操作符后边,如果你希望命令行每 2 小时执行一次,则可以使用 */2。
如何禁用邮件输出
默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止接收 crontab 发送的邮件,需要添加 >/dev/null 2>&1 这段内容到执行的命令的后面,例如:
0 3 * * * /root/backup.sh >/dev/null 2>&1
如果想将输出内容发送到特定的邮件账户中,比如说 这个邮箱, 则你需要像下面这样定义一个 MAILTO 变量:
MAILTO=""0 3 * * * /root/backup.sh >/dev/null 2>&1
访问 “” 查看更多信息。
任务:列出你所有的定时任务
键入以下命令:
# crontab -l# crontab -u username -l
要删除所有的定时任务,可以使用如下命令:
### 删除当前定时任务crontab -r
### 删除某用户名下的定时任务,此命令需以 root 用户身份执行crontab -r -u username
使用特殊字符串来节省时间
你可以使用以下 8 个特殊字符串中的其中一个替代头五个字段,这样不但可以节省你的时间,还可以提高可读性。
特殊字符 含义
@reboot 在每次启动时运行一次
@yearly 每年运行一次,等同于 “0 0 1 1 *”.
@annually (同 @yearly)
@monthly 每月运行一次, 等同于 “0 0 1 * *”.
@weekly 每周运行一次, 等同于 “0 0 * * 0”.
@daily 每天运行一次, 等同于 “0 0 * * *”.
@midnight (同 @daily)
@hourly 每小时运行一次, 等同于 “0 * * * *”.
示例:
每小时运行一次 ntpdate 命令
@hourly /path/to/ntpdate
关于 /etc/crontab 文件和 /etc/cron.d/* 目录的更多内容
/etc/crontab 是系统的 crontab 文件。通常只被 root 用户或守护进程用于配置系统级别的任务。每个单独的用户必须像上面介绍的那样使用 crontab 命令来安装和编辑自己的任务。/var/spool/cron/ 或者 /var/cron/tabs/ 目录存放了个人用户的 crontab 文件,它应该备份在用户的家目录当中。
理解默认的 /etc/crontab 文件
典型的 /etc/crontab 文件内容是这样的:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/# run-parts01 * * * * 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
首先,环境变量必须被定义。如果 SHELL 行被忽略,cron 会使用默认的 sh shell。如果 PATH 变量被忽略,就没有默认的搜索路径,所有的文件都需要使用绝对路径来定位。如果 HOME 变量被忽略,cron 会使用调用者(用户)的家目录替代。
另外,cron 会读取 /etc/cron.d/目录中的文件。通常情况下,像 sa-update 或者 sysstat 这样的系统守护进程会将他们的定时任务存放在此处。作为 root 用户或者超级用户,你可以使用以下目录来配置你的定时任务。你可以直接将脚本放到这里。run-parts命令会通过 /etc/crontab 文件来运行位于某个目录中的脚本或者程序。
目录 描述
/etc/cron.d/ 将所有的脚本文件放在此处,并从 /etc/crontab 文件中调用它们。
/etc/cron.daily/ 运行需要 每天 运行一次的脚本
/etc/cron.hourly/ 运行需要 每小时 运行一次的脚本
/etc/cron.monthly/ 运行需要 每月 运行一次的脚本
/etc/cron.weekly/ 运行需要 每周 运行一次的脚本
备份定时任务
# crontab -l > /path/to/file# crontab -u user -l > /path/to/file
Linux/UNIX 定时任务 cron 详解的更多相关文章
- Linux Crontab 定时任务 命令详解
一. Crontab 介绍 crontab命令的功能是在一定的时间间隔调度一些命令的执行. 1.1 /etc/crontab 文件 在/etc目录下有一个crontab文件,这里存放有系统运行的一些调 ...
- Linux crontab 定时任务命令详解
一.简介 crontab 命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行.通常,crontab 储存的指令被守护进程激活, cr ...
- [转] Linux Crontab 定时任务 命令详解
一. Crontab 介绍 crontab命令的功能是在一定的时间间隔调度一些命令的执行. 1.1 /etc/crontab 文件 在/etc目录下有一个crontab文件,这里存放有系统运行的一些 ...
- syslog之一:Linux syslog日志系统详解
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- linux系统设置服务开机启动3种方法,Linux开机启动程序详解
linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明 ...
- Linux环境fork()函数详解
Linux环境fork()函数详解 引言 先来看一段代码吧, 1 #include <sys/types.h> 2 #include <unistd.h> 3 #include ...
- LINUX系统VMSTAT命令详解
linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1 1表示每秒采集一次vms ...
- (转)Linux 系统设置 : dmesg 命令详解
原文:https://blog.csdn.net/yexiangCSDN/article/details/80683246 https://www.cnblogs.com/duanxz/p/34770 ...
- Linux主要shell命令详解(上)
[摘自网络] kill -9 -1即实现用kill命令退出系统 Linux主要shell命令详解 [上篇] shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的 ...
随机推荐
- JavaScript Array
1.常用方法 // 数组构造 var a = new Array(20); // 长度为20的数组 var b = new Array('red', 'blue', 'white'); var c = ...
- stack overflow错误分析
stack overflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据. 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址 ...
- 【转】Java 项目UML反向工程转化工具
原文链接:http://www.cnblogs.com/bakari/p/3561207.html 今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对 ...
- 【python】 [基础] 数据类型,字符串和编码
python笔记,写在前面:python区分大小写1.科学计数法,把10用e代替,1.23x10·9就是 1.23e9 或者 0.00012就是1 ...
- Linux下运行memcached失败
Linux下运行memcached失败 1.错误信息如下 [root@localhost ~]# memcached can't run as root without the -u switch 2 ...
- Ueditor 上传图片 如何设置只显示 本地上传
我这个是自问自答,其实很简单.只要按照以下方式修改就可以了. 找到image.html 将以下代码 <div id="tabHeads" class="tabhea ...
- Entity Framework Code First (六)存储过程
声明:本文只针对 EF6+ 默认情况下,Code First 对实体进行插入.更新.删除操作是直接在表上进行的,从 EF6 开始你可以选择使用存储过程(Stored Procedures) 简单实体映 ...
- HTTP协议学习--- (十一)理解HTTP幂等性
在httpcomponent 文档中看到如下段落: 1.4.1. HTTP transport safety It is important to understand that the HTTP p ...
- 操作系统也谈"算法"
前言: 近来在准备校招的笔试面试,复习到操作系统时感觉概念性的东西比较多,不过对于以下的几类算法还是有必要做个小小总结. [作业调度算法] 先来先服务(FCFS, First Come First S ...
- linux删除文件后没有释放空间
转载 http://blog.csdn.net/wyzxg/article/details/4971843 今天发现一台服务器的home空间满了,于是要清空无用的文件,当我删除文件后,发现可用空间没有 ...