crontab定时任务

Linux中执行定时任务,一般是经过crond这个守护进程来完成的,用ps -ef | grep crond | grep -v grep能够看到。它会从三个地方读取配置文件来进行后台任务的执行:html

  1. /var/spool/cron/${USER}
  2. /etc/crontab
  3. /etc/cron.d/*

这些配置文件记录了命令行以及执行周期等信息。下面来分别看看这三种类型的配置文件:vim

/var/spool/cron/目录下的配置

该目录下新建一个文本文件,并以当前用户名命名,好比当前是root帐户登陆,则vim root,配置格式是这样:* * * * * 命令bash

第一个 * 表明每小时中的第几分钟(0-59)
第二个 * 表明天天的第几个小时(0-23)
第三个 * 表明每月中的第几天(1-31)
第四个 * 表明每一年的第几个月(1-12)
第五个 * 表明每周的星期几(0-7,0和7都表明星期日)编辑器

特殊符号
,表明不连续的时间。好比0 8,12,16 * * *,就表明在天天的8点0分,12点0分,16点0分各执行一次。
-表明连续的时间范围。好比0 5 * * 1-6,表明在周一到周六的凌晨5点0分执行命令
*/n表明每隔多久执行一次。好比*/10 * * * *,表明每隔10分钟就执行一遍命令url

例:命令行

  • 45 22 * * * 命令 在22点45分执行命令
  • 0 17 * * 1 命令 每周1 的17点0分执行命令
  • 0 5 1,15 * * 命令 每个月1号和15号的凌晨5点0分执行命令
  • 40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
  • */10 4 * * * 命令 天天的凌晨4点,每隔10分钟执行一次命令
  • 0 0 1,15 * 1 命令 每个月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,由于他们定义的都是天。很是容易让管理员混乱。

案例
*/1 * * * * echo 'hello' >> /tmp/a.txt 每隔一分钟向/tmp/a.txt中追加一行hello,可使用tail -f /tmp/a.txt观察code

PS:使用 crontab -e效果等同于 vim /var/spool/cron/${USER}

/etc/crontab配置

这个文件负责安排由系统管理员制定的维护系统以及其余任务的crontab。htm

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
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

# run-parts
00 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
44 4 1 * * root run-parts /etc/cron.monthly

MAILTO=root是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁。blog

00 * * * * root run-parts /etc/cron.hourly:在 #run-parts 以后的命令,能够看到,五个占位符后面接的是root,表明以root身份执行。而run-parts表明后面接的/etc/cron.hourly是该目录内(/etc/cron.hourly)的全部可执行文件,也就是说,每一个小时的00分,系统会以root身份去/etc/cron.hourly这个目录下执行全部可执行的文件,后面三行也是相似的意思。能够将天天须要执行的命令直接写到/etc/cron.daily便可,这样能够不使用crontab -e。进程

/etc/cron.d/目录下的配置

该目录用来存听任何要执行的crontab文件或脚本。

权限

查看/etc目录下有没有cron.allow或cron.deny文件,做用以下:

  1. 若是两个文件都不存在,则只有root用户才能使用crontab命令。
  2. 若是cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,若是root用户也不在里面,则root用户也不能使用crontab。
  3. 若是cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
  4. 若是两个文件都存在,则列在cron.allow文件中并且没有列在cron.deny中的用户可使用crontab,若是两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,若是cron.allow中有该用户,则可使用crontab命令。

crontab用法

crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把须要执行的命令序列放到crontab文件中以得到执行。

  • -l 在标准输出上显示当前的crontab。
  • -r 删除当前的crontab文件。
  • -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。

参考

Linux下的crontab定时执行任务命令详解

相关文章
相关标签/搜索