Linux系统计划任务之二:cron任务调度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统计划任务之二:cron任务调度相关的知识,希望对你有一定的参考价值。

接上一内容Linux系统计划任务之一:at指令


  系统在日常的运行当中,经常需要作一些周期的备份或检查工作。这种有规律的循环执行的工作任务,在Linux系统中是用crond系统服务来实现的。crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,它在CentOS系统上默认是打开的。

[[email protected] ~]# chkconfig --list crond
crond  0:off1:off2:on3:on4:on5:on6:off


  linux下的任务调度分为两类,分别为系统级任务调度和用户级任务高度。下面分别介绍。


  1.系统级任务调度


  Linux系统周期性执行的任务,比如说自动的进行在线更新 (on-line update)、自动的进行 updatedb更新文件名数据库等。这种工作调度可通过编辑全局配置文件/etc/crontab(这是一个纯文本文件,不要跟/usr/bin/crontab可执行文件混淆)来进行。该文件的内容如下:

[[email protected] ~]# vim /etc/crontab
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

  该文件前四行是配置cron任务运行的环境变量信息。如下表:

技术分享


  文件中以#开头的内容是对任务的配置格式的具体说明。


  任务的配置格式为:分 时 日 月 周 执行用户 执行指令内容 ,共7小节。

  参数所代表的含义如下表所示:

技术分享

  第5列周几的数据0和7表示星期天。

  前五列的值还可以含有一些辅助字符,如下表:

技术分享

  第6列为执行用户。如这一列内容为空的话,将导致所配置的例行程序无法运行。

  第7列为所要执行的指令。这有两种方法,一种是直接以指令形式下达,一种是linux系统中常用的指定某个存放某类脚本文件的目录的方式。 

  A.指令形式

  如系统每5分钟记录一次内存余量情况,并写在文件中。

  */5  *  *  *  *  root  grep "^MemFree" /proc/meminfo >> /tmp/memory.log


  B.指定目录方式

  首写编写要执行的脚本并保存到某特定的目录中。如下,编辑文件

 

[[email protected] ~]# vim /tmp/cron/backupEtc.sh
  #!/bin/bash
  tar -Jcf /backup/etc_`date ‘+%F_%T‘`.tar.xz /etc/*

 #保存后修改文件模式。注意,目录中的脚本文件必须具体可执行权限。否则,无法运行。

 

[[email protected] ~]# chmod a+x /tmp/cron/backupEtc

  编辑/etc/crontab文件,添加如下内容

  0  4  *  *  *  root  run-par ts /tmp/cron/  

  该行内容设定系统每天4点钟自动执行目录/tmp/cron下的所有脚本文件,包括上面自定义的自动备份/etc目录下文件的脚本。 

  在/etc目录下,系统已设置了cron.daily、cron.hourly、cron.monthly、cron.weekly目录信息。为管理的规范,也可将执行任务的脚本放在前4个相应的目录中。


  2.用户级任务调度


  用户如有周期性要执行的工作,比如给用户数据备份或维护人员定期检查服务器状态并邮件提醒等。用户可以使用crontab命令来定制自己的任务调度。

  如用户zeng登录后,使用crontab –e指令编辑任务内容。

  [[email protected] ~]$ crontab –e

  用户任务调度的配置格式同系统级任务调度全局性文件/etc/crontab的格式相同,只是无需指定第6列执行用户,具体说明见上一小节。输入如下内容并保存退出。

  #该例子只用开测试

  */5 * * * * echo "now is:`date `" >> /tmp/userCron.log

每一个任务一行,可输入多个任务。该命令中所输入的内容会自动的保存到/var/spool/cron/zeng文件中。

  [[email protected] ~]# cat /var/spool/cron/zeng 

  */5 * * * * echo "now is:`date `" >> /tmp/userCron.log

  用户级任务调度的编写内容与系统级调度内容相比较,只是少写了执行用户而以,其它相同。


  Crontab的其它参数说明

  -u:只有root能下达的参数,可指定所建立、查询或删除crontab信息的用户

  -l:查看用户crontab的内容,默认是当前登录用户

  -e:编辑crontab文件的内容

  -r:删除crontab文件的内容

  如查询用户的任务调度作业

[[email protected] ~]#crontab -u zeng -l
#显示内容
*/2 * * * * echo"now is:`date ‘+\%F \%T‘ `" >> /tmp/userCron.log


以上是关于Linux系统计划任务之二:cron任务调度的主要内容,如果未能解决你的问题,请参考以下文章

Laravel-任务调度

Linux计划任务

Linux计划任务

每天一个Linux命令—— crontab

linux系统任务调度命令crontab

[ Laravel 5.6 文档 ] 进阶系列 —— 任务调度