linux 计划任务

Linux之 计划任务

介绍

相信每个人都有使用闹钟的习惯,我们设定闹钟的种类有很多。比如说,只提醒一次、工作日提醒、休息日提醒等。在设定闹钟之后,每天的设定时间都会按时的提醒你去做什么事情,以免自己忘记一些重要的会议等事情。像这样在每天特定的时间安排做一些事情。这样一种事情我们就称之为例行任务计划。 其实在个系统平台上都有类似的例行性任务计划功能,那如何去像设定闹钟一样在Linux系统之上指定例行性任务计划。

Linux的计划任务是系统管理方面的一个重要内容,是系统自动完成工作的一种实现方式,正因为有了计划任务,我们才可以完全实现系统管理的脚本化和自动化,提高工作效率。

本文将从以下两个大方面介绍Linux系统中计划任务。

  • 一次性计划任务–at命令
  • 周期性计划任务–cron命令

一次性计划任务–at命令

一次性计划任务就是根据用户设定在未来的某个时间点执行一次任务,执行完毕后就结束,本文所有内容皆以CentOS6版本为例。

一、at 命令

# 查询命令是否已经启动,at命令依赖于atd服务,包括以下将要介绍的cron的crond服务、anacron服务想要执行相应的计划任务,对应的服务都要开启,查看服务是否开启 service atd status
# 如果命令没有启动的话,将其启动 systemctl start atd
# at主要为以下的几个文件,接下来会介绍到 
/etc/at.deny                                #at命令的黑名单
/etc/at.allow                               #at命令的白名单
/etc/rc.d/init.d/atd                        #at命令的服务名称
/etc/sysconfig/atd                          #at的服务
/var/spool/at                               #计划任务的暂存目录

at 命令的设定格式 at [-V] [-q queue] [-f file] [-mMlbv] TIME

options:

-V: 显示版本信息
        -l: 列出队列中等待运行的作业列表=>等价于atq
        -d: 删除指定的作业;相当于atrm
        -c: 查看具体作业任务
        -f /path/from/somefile:从指定的文件中读取任务
        -m:当任务执行完后,向用户发送邮件,即使没有标准输出

TIME 指定任务的开始执行时间

TIME的几种表达格式

TIME格式:
        绝对时间:HH:MM,DD.MM.YY , MM/DD/YY
            eg  :06:06   
        相对时间:now+#
            单位:minutes, hours, days, weeks
            eg  :now+3minutes   
        模糊时间:noon, midnight, teatime
            eg  : noon

这里说明:作业执行命令的结果中的标准输出和错误以mail通知给安排任务的用户,如果任务非常多需要考虑定期清理邮件内容,防止垃圾过多影响系统稳定运行

at 命令创建计划任务

在创建一次性计划任务时,有多中方法下面列举出几种供读者来比较

交互式创建

交互式定义计划任务的方式,是最简单的。
这里说明:交互式定义计划任务的时候,需要Ctrl+D正常退出命令
举例说明:

指定时间创建计划任务
[root@Centos6 ~]#at 06:06
at> echo "hello world"
at> <EOT>
job 1 at 2017-09-01 06:06

使用-l 选项查看计划任务是否设置成功
[root@Centos6 ~]#at -l
1   2017-09-01 06:06 a root

输入重定向设定计划任务

at命令也可以接受重定向,因此我们按照格式直接设定就好

#利用多行重定向
[root@Centos6 ~]#at 06:00 << EOF
> echo "hello world"
> EOF
job 2 at 2017-09-04 06:00

从文件中读入

与其它许多命令一样,at也可以接受来自文件的输入。

#创建一个计划任务文件
[root@centos6 ~]#cat f1
echo "hello world "
echo "hi"

通过-f选项将文件传给at命令
[root@localhost ~]#at -f f1 05:00

at 命令 白名单 黑名单

  • 白名单:/etc/at.allow 默认不存在,只有该文件中定义的用户才能执行at命令
  • 黑名单:/etc/at.deny  默认存在,拒绝该文件中定义的用户执行at命令
  • 如果两个文件都不存在,只有 root 可以执行 at 命令,
  • 如果两个文件都存在,则at.deny文件失效,只有at.allow文件中白名单可以执行at命令,不在allow文件中的用户(除了root),都不能执行at命令。

周期性的计划任务 cron

    cron自身是一个不间断运行的程序 周期性的计划任务 分为三种: 系统cron任务,anacron任务,用户cron anacron 任务: 为cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务在恢复正常执行一次,适用于经常开机关机的设备,而像大型的服务器大多处于长时间开机的状态,默认下anacron服务处于关闭状态。

以下主要介绍:系统cron以及用户cron

系统的cron

    系统的计划任务,顾名思义,只有root管理员才能设定的计划任务,其实普通用户也能设定计划任务只是设定的方法有区别,接下来会介绍到系统的cron,定义在/etc/crontab文件中,包含7个字段,我们来看一下/etc/crontab内的内容

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 默认向指定用户发送邮件
# 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 
# |  |  |  |  |        .---- username 
# |  |  |  |  |        |
# *  *  *  *  * user-name command to be executed 分别表示为:

分钟  小时  天  月  周  用户  命令  

时间的有效取值:
            分钟:0-59
            小时:0-23
            天:1-31
            月:1-12
            周:0-7,0和7都表示周日

注意:
(1) 每一行定义一个周期性任务,共7个字段;
   *  *  *  *  * : 定义周期性时间
   user-name     : 运行任务的用户身份
   command to be executed: 任务
 
(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
 
(3) 执行结果邮件发送给MAILTO设定的用户

在/etc/crontab中时间的表示方法

时间表示法:
(1) 特定值;
给定时间点有效取值范围内的值
注意:day of week和day of month一般不同时使用;
(2) *
给定时间点上有效取值范围内的所有值;表“每..”
(3) 离散取值:
在时间点上使用逗号分隔的多个值; #,#,#
(4) 连续取值:-
在时间点上使用-连接开头和结束; #-#
(5) 在指定时间点上,定义步长: /#:#即步长;

注意:

(1) 指定的时间点不能被整除时,其意义将不复存在;
(2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制,例如写成脚本;

示例:

(1) 3 * * * *       :每小时执行一次;每小时的第3分钟;
(2) 3 4 * * 5       :每周执行一次;每周5的4点3分;
(3) 5 6 7 * *       :每月执行一次;每月的7号的6点5分;
(4) 7 8 9 10 *      :每年执行一次;每年的10月9号8点7分;
(5) 9 8 * * 3,7     :每周三和周日;
(6) 0 8,20 * * 3,7  :每周三和周日;8点整和20点整
(7) 0 9-18 * * 1-5  :每周一到周五:9点正到18点正
(8) */5 * * * *     :每5分钟执行一次某任务

这里说明当星期时间和每个月的某天发生冲突时,最终的执行时间为两者的并集

系统自带计划任务命令

系统本身自带的计划任务命令,代替了较为简单的设定,比如每天、每月、每小时等等。

@reboot    Run once after reboot.
@yearly     0 0 1 1 * 
@annually   0 0 1 1 *
@monthly    0 0 1 * *
@weekly     0 0 * * 0
@daily      0 0 * * *
@hourly     0 * * * *

cron 命令 白名单 黑名单

cron也有对应的黑白名单设定文件位置为/etc/cron.deny 和 /etc/cron.allow ,关于黑名单和白名单与at命令的使用是一致的。

用户的cron:

相比系统管理员root设定计划任务来说,用户当然也可以设定自己的计划任务,用户可以通过命令生成任务文件,也可以直接在对应的目录下自己编辑文件(不建议)。

用户创建计划任务的文件位置:/var/spool/cron/USERNAME,如果用户创建了cron任务,在/var/spool/cron/ 下面就会生成一个与用户名一致的临时文件,里面记录了需要执行的计划任务。

crontab命令的格式(两种)

crontab [-u user] file
       crontab [-u user] [-l | -r | -e] [-i] [-s]
                -l: 列出所有任务;
                -e: 编辑任务;
                -r: 移除所有任务;
                -i:同-r一同使用,以交互式模式移除指定任务
                -u user: 仅root可运行,指定用户管理cron任务
                file : 从相应文件读取计划任务

示例:

用户创建计划任务

crontab -u wang -e

查看任务列表

crontab -l

删除所有任务(交互式)

crontab -r -i

这里说明一下:只有root用户才能够指定以哪个普通用户的身份来创建,在创建完成后被指定的用户在/etc/spool/cron/下能够找到与自己用户同名的任务文件。

anacron 计划任务 (cron的补充任务)

前面提到过anacron存在的作用,下面只对其进行简单的介绍,anacron的大致用法与cron差异不大。

anacron 的文件在/etc/anacrontab,我们来看一下

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45
# the jobs will be started during the following hours only START_HOURS_RANGE=3-22
#period in days   delay in minutes   job-identifier command 1 5   cron.daily      nice run-parts /etc/cron.daily
7  25  cron.weekly     nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly        nice run-parts /etc/cron.monthly

分为4个字段,每段表示为:
过去有多少天没有执行   开机后多少分钟开始执行  描述  命令

这里说明:开机后系统为了防止存在众多需要执行的计划任务在同一时间执行,影响系统运行速率,便设定了生成随机的开机时间,来解决这个问题

到此为止系统的计划任务已介绍完成,当然还有不足及错误之处,望提出指正。   

原创文章,作者:M25_ymd,如若转载,请注明出处:http://www.178linux.com/86236

(2)
M25_ymdM25_ymd
上一篇 2017-09-04
下一篇 2017-09-04

相关推荐

  • linux中特殊符号用法

    1 #    #  管理员账户    $  普通账户   在脚本中 #也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后边是注解文字,不会被执行 例如     #!/bin/bash     #th…

    Linux干货 2016-08-15
  • python Django分页

    自定义html_helper.py  —>  Page_helper类 #coding:utf-8 from django.utils.safestring import mark_safe class Page_Helper(object):    …

    Linux干货 2016-08-22
  • Linux系统

    1、计算机的组成及其功能 从基本结构上来讲,电脑可以分为五大部分:运算器、存储器、控制器、输入和输出设备。 运算器(Datapath):对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 存储器(Memory):存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。 控制器(Control):整个计算机的中枢神经,对程序规定的控制信息进行解释,…

    Linux干货 2016-10-30
  • linux中nmcli命令使用及网络配置

      Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。  NetworkManager 可以用于以下类型的连接:Ethernet,VLA…

    Linux干货 2016-09-10
  • shell中的引号用法

        SHELL引号  在shell里可以通过使用单引号,双引号,反引号(TAB键上方的按键),反斜线来转换某些shell元字符的含义。比如说,我们希望echo命令显示出$本身字符的意义,而不是变量,我们需要使用某些功能来屏蔽$符号本身赋予的特殊含义,使其还原本身字面的意思。 主要讲述四个比较特殊常用的符号。 1.反…

    2017-06-11
  • MySQL双主复制模型

    配置双主数据库实例 双方可以相互复制 为了不影响效果,两台虚拟机把刚才生成的数据文件都删除 rm -rf /var/lib/mysql/* 1、时间要同步 2、双方既要启动中继日志,也需要启动二进制日志 3、编写主的配置文件 双主复制时有一个最大的问题,自动增长字段会重叠。为了避免重叠,一个节点使用奇数,另一个节点使用偶数 这里表示的意思,从1增长,一次增长…

    Linux干货 2016-11-21