crontab命令-定时任务
crontab是英文“cron table”的[[缩写|简写]]。该命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件是系统任务调度的配置文件。用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
语法格式:crontab [参数]
常用参数:
-e
编辑该用户的计时器设置
-l
列出该用户的计时器设置
-r
删除该用户的计时器设置
-u
指定要设定计时器的用户名称
--help
显示帮助信息
参考实例
创建、编辑计划任务:
crontab -e 查看当前计划任务:
crontab -l 删除所有计划任务:
crontab -r 在正式部署计划任务前,我们了解一下使用crond服务设置任务的参数格式( 需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位 ):
minute hour day month week command 顺序:分 时 日 月 周 命令 使用crond设置任务的参数字段说明:
minute 表示分钟,是从0到59之间的任何整数 hour 表示小时,是从0到23之间的任何整数 day 表示日期,是从1到31之间的任何整数 month 表示月份,是从1到12之间的任何整数 week 表示星期,是从0到7之间的任何整数,其中0或7代表星期日 command 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件 每周一、三、五的凌晨3点25分,使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们使用crontab -e命令来创建计划任务。为自己创建计划任务无需使用-u参数,具体的实现效果的参数如crontab -l命令结果所示:
crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
# 每5分钟
*/5 * * * *
# 周一到周五
* * * * 1-5
# 每月最后一天
* * 28-31 * * [`date -d tomorrow +\%e` -eq 1] && do something ~~* * L * * do something ~~ # 每月倒数第二天,其它天数可依此类推 * * L-1 * * do something
root用户添加以其它用户执行的定时任务,有两种方式,
# 指定用户,会切换到该用户下的crontab
crontab -e -u username
# 以当前用户添加,但实际执行用户是username
crontab -e
* * * * * username command其中问号(?)只能用在DayofMonth和DayofWeek两个域,由于指定日期(DayofMonth)和指定星期(DayofWeek)存在冲突,所以当指定了日期(DayofMonth)后(包括每天*),星期(DayofWeek)必须使用问号(?),同理,指定星期(DayofWeek)后,日期(DayofMonth)必须使用问号(?)。
crontab的另外一种写法
# 常见写法
0 * * * * sh filename.sh
# 另一种写法
@hourly sh filename.sh格式解释:
@reboot:在系统启动时运行一次
@yearly:每年运行一次
@annually:也是每年运行一次
@monthly:每月运行一次,“0 0 1 * *”
@weekly:每周运行一次,“0 0 * * 0”
@daily:每天“0 0 * * *”
@midnight:同上,每天
@hourly:每小时"0 * * * *"
crontab 默认是 nano 编辑器,不好用,将 crontab 改为 vim 编辑器
直接定义变量指定 crontab 为 vim 编辑器
export EDITOR="/usr/bin/vim" ; crontab -e或使用更简单的方式,直接从重新指定 crontab 的默认编辑器,执行以下命令,选择对应编辑器的编号即可
select-editor
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic # vim
3. /usr/bin/vim.tiny # vi
4. /bin/ed记一次crontab问题排查
一次在查看cron日志文件时,发现有一个定时任务执行不成功的日志记录。经查看, 该执行文件已重命令,而且也通过crontab -e 命令删除了对应的任务。但发现仍然会按之前的定时任务配置继续执行。通过crontab -l 无法看到相应的定时任务配置,查看/etc/crontab文件中也没有相应的配置。最后抱着尝试的心态看一看cron的配置文件,结果发现在/etc/下有一个cron.d目录,ntpd服务用于定时同步时间的配置在这个目录下以文件形式存在。再一看那个通过crontab -e删除的任务赫然也在。移除该文件后定时任务终于彻底不再继续执行
cron运行时,top的输出被截断为80字符宽
有时在脚本中使用top命令时,配置为定时任务输出内容到指定文件会发现输出内容长度不完整。 可以在定时任务的时间后面加上COLUMNS=9999来设置输出内容显示宽度
* * * * * COLUMNS=9999 /tmp/top.sh最后更新于