在linux中,需要一些定时任务来备份日志或者监控程序是否正常运行,此时可以借助工具crontab。方法如下,下面是转载至一篇博客,尊重原著,贴上链接,以及一些我自己的经验在最后。
本文转载自博客
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于”crontab”文件中,以供之后读取和执行。
在Linux系统中,Linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
一、/etc/crontab、/etc/cron.deny 、 /etc/cron.allow文件介绍
系统调度的任务一般存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序,通过命令我们可以看一下里面的内容:
[root@xiaoluo ~]# cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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这些任务都会是系统在运行起来后自动进行调度的。同时在/etc目录下还存放了/etc/cron.deny 和 /etc/cron.allow 文件/etc/cron.deny 表示不能使用crontab 命令的用户/etc/cron.allow 表示能使用crontab的用户。
如果两个文件同时存在,那么/etc/cron.allow 优先。
如果两个文件都不存在,那么只有root用户可以安排作业。
二、.crontab命令语法及其各个参数含义
crontab命令的语法为:
crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
注意:crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
各个参数说明:
-e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 vi-r [UserName]: 删除目前的时程表-l [UserName]: 列出目前的时程表-v [UserName]:列出用户cron作业的状态
三、crontab命令的格式
我们如果要创建自己的一个任务调度,可以使用 crontab -e 这个命令,如:
[root@ xiaoluo ~]# crontab -e
此时会进入到vi编辑界面,来编写我们要调度的任务,crontab调度命令的格式如下:
* * * * * command path // 前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
调度命令的规则:
字段名称 说明 取值范围
分钟 每小时的第几分钟执行 0-59小时 每日的第几个小时执行 0-23日期 每月的第几天执行 1-31月历 每年的第几月执行 1-12星期 每周的第几天执行 0-6命令名称 欲执行的命令及参数
crontab命令中的一些常用特殊符号:
符号 说明* 表示任何时刻, 表示分割- 表示一个段,如第二段里: 1-5,就表示1到5点/n 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.*/10 * * * * 每隔10分 执行0 17 * * * 每天的17:00 执行43 21 * * * 每天的21:43 执行
下面是我的一些经验;
1、我们执行命令crontab -e 新加一条定时任务,然后保存后不需要重启crontab的,会自动执行。
如下日志备份明天凌晨4点备份的命令
首先执行命令crontab -e 打开编辑器
然后输入如下内容
0 4 * * * /data/esb/domain/baklog.sh
最后保存即可。
2、一些常用命令
其实上面也已经总结了,但是这里还是列一下
crontab -l 列出当前登录用户所有定时任务crontab -l -u XXX 列出XXX用户所有的定时任务,如果没有会提示 no crontab for XXXcrontab -e 编辑当前用户的定时任务crontab -r 删除当前用户的定时任务tail -f /var/log/cron 查看crontab的执行情况vim /var/spool/main/root 查看crontab的执行log0 0 1,5,10 * * 每月1号,5号,10号执行0 0 1-5 * * 每月1到5号执行
