首页 > 代码库 > 六、任务计划管理cron

六、任务计划管理cron

6.1、一次任务计划at/batch

  • at:定时运行命令

  作用:at命令再指定时刻执行指定的命令序列

  用法:at [-V][-q 队列][-f file][-m] time


常用选项:

  -V:输出版本号

  -q:选用-q参数则可选队列名称,队列名称可以是a-z和A-Z之间的字母,队列字母顺序越高,队列优先级越高。

  -f:从文件中读取命令或者shell脚本,而非在提示后指定他们。

  -m:执行完作业后发送邮件给用户

  time:指定作业执行时间
    绝对时间: HH:MM, DD.MM.YY MM/DD/YY
    相对时间: now+# 单位: minutes, hours, days, weeks
    模糊时间: noon, midnight, teatime

[root@mylinux home]# at -f date 12:20     #12:20执行date文件中的命令
job 6 at 2017-04-22 12:20
[root@mylinux home]# cat date             #date文件中的命令
ls -l
date
[root@mylinux home]# date
2017年 04月 22日 星期六 12:20:19 CST
You have new mail in /var/spool/mail/root
[root@mylinux home]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 12 messages 2 new 6 unread
    1 Cron Daemon           Mon Jul 18 23:00  23/961   "Cron <root@myli"
    2 Cron Daemon           Tue Jul 19 01:00  23/961   "Cron <root@myli"
    3 Cron Daemon           Tue Jul 19 01:20  23/961   "Cron <root@myli"
    4 Cron Daemon           Sat Aug 27 21:40  23/857   "Cron <root@myli"
    5 Cron Daemon           Sat Aug 27 22:00  23/857   "Cron <root@myli"
    6 Cron Daemon           Sat Aug 27 22:20  23/857   "Cron <root@myli"
 U  7 Cron Daemon           Sat Aug 27 22:40  23/856   "Cron <root@myli"
 U  8 Cron Daemon           Sat Aug 27 23:00  23/856   "Cron <root@myli"
 U  9 Cron Daemon           Sun Jan  1 08:00  23/858   "Cron <root@myli"
 U 10 Cron Daemon           Sat Apr 15 17:00  23/961   "Cron <root@myli"
>N 11 root                  Sat Apr 22 12:20  21/877   "Output from you"
 N 12 root                  Sat Apr 22 12:22  21/877   "Output from you"
& 11   
Message 11:           #邮件中的内容为定时任务执行过后的输出
From root@mylinux.localdomain  Sat Apr 22 12:20:01 2017
Return-Path: <root@mylinux.localdomain>
X-Original-To: root
Delivered-To: root@mylinux.localdomain
Subject: Output from your job        5
To: root@mylinux.localdomain
Date: Sat, 22 Apr 2017 12:20:01 +0800 (CST)
From: root@mylinux.localdomain (root)
Status: R

总用量 261004
-rw-r--r--  1 root root        11 4月  22 12:17 date
-rw-r--r--  1 root root 266980208 4月  19 13:59 dow.zip
drwxr-xr-x  3 root root      4096 2月  21 19:11 python_web
drw-r--r-x  2  500  500      4096 4月  29 2016 samba
drwxr-xr-x  2 root root      4096 9月   3 2016 shell
drwxr-xr-x 11 root root      4096 3月  24 16:40 wswp-code
2017年 04月 22日 星期六 12:20:00 CST
--More--
  • atq:显示目前使用at命令后执行的命令队列

 作用:使用atq命令查询已经设定的命令序列。


常用选项:

  -V:输出版本号

  -q:选用-q参数则可选队列名称,队列名称可以是a-z和A-Z之间的字母,队列字母顺序越高,队列优先级越高。

[root@mylinux home]# atq
4       2017-04-22 15:30 a root
7       2017-04-22 12:30 a root
  • atrm:删除at命令中执行的命令

 作用:atrm命令可以删除at命令中待执行的命令队列

[root@mylinux home]# atrm 4    #删除4号任务
[root@mylinux home]# atrm 7    #删除7好任务
[root@mylinux home]# atq
  • batch:在系统负载水平允许的条件下执行命令

  用法:batch [-V][-q 队列][-f file][-mv] [time]

常用选项:

  -V:输出版本号

  -q:选用-q参数则可选队列名称,队列名称可以是a-z和A-Z之间的字母,队列字母顺序越高,队列优先级越高。

  -f:从文件中读取命令或者shell脚本,而非在提示后指定他们。

  -m:执行完作业后发送邮件给用户

  -v:显示作业要执行的事件

命令控制列表: /etc/at.deny /etc/at.allow

  这两个文件可以限制对at和batch命令的使用,用法都是每行一个用户。两个文件都不允许使用空白字符。当控制文件修改时,at守护进程不必重启。每次用户尝试执行at和batch时,控制列表都会被读取,当然root用户总是可以执行at和batch命令。如果at.allow文件存在,只有其中列出的用户才能使用at或batch命令,at.deny文件会被忽略;如果at.allow文件不存在,所有在at.deny文件中列出的用户都将禁止使用at和batch命令。

6.2、周期任务计划 crontab/anacron

 可以使用crontab将系统设定在每天、每周和每月的某个时刻自动运行某个命令或者应用程序,实现系统资源的循环定时调用。crontab仅仅是一个文本文件,可以使用任何UNIX编辑器进行编辑。其包含四种代码行:空行、注释、环境变量和命令。

cron预设的5个环境变量:

  PATH默认是/usr/bin:/bin

  SHELL预设值:/bin/sh

  LOGNAME初始化为crontab所有者用户名

  HOME设置为crontab所有者的目录,如/home/joe

  MAILTO设置为crontab所有者的名称

  cron守护进程是一个由实用程序和配置文件组成的小型子系统。cron的组件包括守护进程本身;一组系统范围的配置文件;一组针对特定用户的配置文件;一个用来添加、删除用户配置文件的实用程序;以及一个简单的访问控制列表。一般来说cron配置文件或者cron作业列表成为crontab或cron时间表。

可以在这些位置定义与系统相关的作业:

cron.d/       cron.deny     cron.monthly/ cron.weekly/  

cron.daily/   cron.hourly/  crontab    

  cron守护进程连续运行,每分钟检查一次配置文件的修改,cron读取系列范围和针对用户的crontab的调度计划并执行这一分钟内应该执行的所有命令。这个守护进程还不或每个作业的输出,并通过电子邮件发送给作业的所有者。

  • crontab命令的使用

crontab

-l: 列出当前用户的所有cron任务  

-e: 执行文字编辑器来设置时程表

-r: 移除所有任务   

-u USERNAME: 管理其用户的cron任务(root使用)

-i:同-r一同使用,以交互式模式让用户有选择地移除指定任务

系统任务配置文件:/etc/crontab

f1  f2  f3  f4  f5 user-name command
#f1表示分钟,f2表示小时,f3表示一个月份中的第几天,f4表示月份,f5表示一个星期中的第几天
#user-name执行该任务的用户,command表示要执行的程序

用户任务配置文件:/var/spool/cron/USERNAME

f1  f2  f3  f4  f5  command
#f1表示分钟,f2表示小时,f3表示一个月份中的第几天,f4表示月份,f5表示一个星期中的第几天
#command表示要执行的程序
时间通配表示:
  *: 对应时间的所有有效取值     
  1,2,5: 离散时间点:    
  12-23:连续时间点:     
  /#:对应取值范围内每隔#执行一次,如/20
 0 * * * * /bin/ls           #每小时的第0分钟执行一次/bin/ls
 2 0/20 6-12 * 12 * /usr/bin/backup 
                             #在12月,每天早上6-12点,每隔20分钟执行一次/usr/bin/backup

常用调度计划的简写形式:

@reboot   每当计算机重新引导时运行命令

@daily    每天一次的简写形式

@weekly   每周一次的简写形式

@annually 每年一次的简写形式,也可以@yearly

@midnight 在每天午夜运行命令,相当于@daily

  • anacron命令

 anacron和cron相似的任务调度器,只不过他不要求系统持续运行。anacron能够实现让cron因为各种原因在过去的时间该执行而未执 行的任务再恢复正常执行一次。

  anacron任务被列在配置文件/etc/anacrontab 中,文件的每一行代表一项任务;格式为:

period   delay    job-identifier   command
#period:命令执行的频率(天数)
#delay:延迟时间(分钟)
#job-identifier:人物的描述,用在anacron的消息中,并为作业时间戳文件的名名称,不能包含非空格符
#command:要执行的命令

  对于每项任务,anacron先判定该任务是否在配置文件的period字段中指定的期间内被执行了。如果没有执行,那么anacron会等待delay字段中指定的分钟数,然后执行命令。

  任务完成后anacron在/var/spool/anacron目录内的时间戳文件中记录日期,只有日期被记录(无时间),而且job-indentifier的值被用作时间戳文件的名称。

本文出自 “随风而飘” 博客,请务必保留此出处http://yinsuifeng.blog.51cto.com/10173491/1918444

六、任务计划管理cron