linux之计划任务

一、同步系统时间

在进行计划任务之前,一定要确保服务器的时间是准确无误的,否则将造成计划任务失败或者无法达到预期效果,尤其是在大规模的集群环境中,更显得尤为重要,所以我们首先要学会的就是同步服务器时间。

CentOS6:

    ntpdate 172.x.x.x     将时间与服务器同步

    vim /etc/ntp.conf     修改此文件

    server 172.x.x.x iburst   添加此行

    chkconfig ntpd on    下次开机自动启动ntpd服务

    service ntpd start   打开ntpd服务

    service ntpd status   检查ntpd服务状态

CentOS7:

    ntpdata 172.x.x.x                       将时间与服务器时间同步

    vim /etc/chrony.conf                    修改此文件

    server 172.x.x.x iburst                 加上此行

    systemctl enable chronyd               下次启动自动打开chronyd服务

    systemctl start chronyd                打开chronyd服务

    systemctl status chronyd               检查chronyd服务状态

二、at命令

at命令用于指定一个定时任务,在某个特定的时间节点执行一次。at命令也可以用于删除已经设置好的定时任务,与at命令相关的命令有atq,atrm,batch命令。at和batch名均是从标准输入中或指定的文件中读取相关的命令,并在指定的时间运行对应的命令,其运行过程中使用的shell为/bin/sh。在运行at命令前,需要确保系统启动了atd服务。

在执行at命令前先确定at服务是否处于运行状态

 centos7:

systemctl status atd      # 确认处于active(running)状态

systemctl start atd     # 如果服务未开启,请开启atd服务

与at命令相关的文件

  • /var/spoll/at: 用户存储设置好的at任务的目录,可进入该目录删除相应的at任务
  • /etc/at.allow: 记录着允许使用at命令的用户,只有在这个目录里的用户才能使用at
  • /etc/at.deny: at命令的黑名单,在里面的用户不允许使用at命令

如果at.allow和at.deny文件不存在,则只有root用户才允许使用at命令
at.allow文件的优先级大于at.deny文件

at命令的使用方式

  • 常用选项
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
  • 参数

    日期时间:指定任务执行的日期时间。

  • 实例

1:三天后的下午 5 点锺执行/bin/ls
        [root@localhost ~]# at 5pm+3 days
        at> /bin/ls
        at> <EOT>
        job 7 at 2018-01-08 17:002:明天17点钟,输出时间到指定文件内
    [root@localhost ~]# at 17:20 tomorrow
    at> date >/root/2013.log
    at> <EOT>
    job 8 at 2018-01-06 17:203:使用atq命令来查看系统没有执行工作任务
    [root@localhost ~]# atq
    8       2018-01-06 17:20 a root
    7       2018-01-08 17:00 a root

例4:删除已经设置的任务
    [root@localhost ~]# atq
    8       2018-01-06 17:20 a root
    7       2018-01-08 17:00 a root

    [root@localhost ~]# atrm 7
    [root@localhost ~]# atq
    8       2018-01-06 17:20 a root

例5:显示已经设置的任务内容
    [root@localhost ~]# at -c 8
    #!/bin/sh
    # atrun uid=0 gid=0
    # mail     root 0
    umask 22此处省略n个字符
    date >/root/2018.log

三、crontab

而crontab命令是用于设置、移除或显示相关为crond守护进程服务的周期性任务。Linux系统默认会安装crond守护进程, 并在开机的时候自动启动。每个用户属于自己的crontab,并且保存在/var/spool/cron目录下。

在执行crontab命令前先确定at服务是否处于运行状态

setvice crond status   # 查看crond的服务状态

service crond start    # 启动服务

service crond stop     # 关闭服务

service crond restart  # 重启服务

service crond reload   # 重新载入配置

Linux下的任务调度分为两类:系统任务调度和用户任务调度。

  1. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
    在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
    内容如下
[root@localhost ~]# cat /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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
# run-parts

前三行分别定义了crontab任务执行时使用的shell、环境变量及邮件的收件人。
其后的注释介绍了crontab任务的使用格式及各个选项的含义。
接着紧跟的四行周期性任务,分别代表每小时、每天、每周、每月运行一次的周期任务,
其执行身份为root,并且使用run-parts bash脚本抓取随后紧跟的目录下的脚本来执行。

2.用户任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:

  • /etc/cron.deny 该文件中所列用户不允许使用crontab命令
  • /etc/cron.allow 该文件中所列用户允许使用crontab命令
  • /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名

crontab的使用方法

  • 常用选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
  • 参数

    crontab文件:指定包含待执行任务的crontab文件。

  • 实例

1:每1分钟执行一次command
    * * * * * command2:每小时的第3和第15分钟执行
    3,15 * * * * command3:在上午8点到11点的第3和第15分钟执行
    3,15 8-11 * * * command4:每隔两天的上午8点到11点的第3和第15分钟执行
    3,15 8-11 */2 * * command5:每个星期一的上午8点到11点的第3和第15分钟执行、
    3,15 8-11 * * 1 command6:每晚的21:30重启passwd 
    30 21 * * * /etc/init.d/passwd restart

例7:每月11022日的4 : 45重启passwd 
    45 4 1,10,22 * * /etc/init.d/passwd restart

例8:每周六、周日的1:10重启passwd
    10 1 * * 6,0 /etc/init.d/passwd restart

例9:每天18 : 0023 : 00之间每隔30分钟重启passwd 
    0,30 18-23 * * * /etc/init.d/passwd restart

例10:每周三凌晨三、五点10分执行脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    vim date.sh
        #!/bin/bash
        date +'%F %T'
    10 3,5 * * 3 root /bin/bash date.sh

猜你喜欢

转载自blog.csdn.net/lv8549510/article/details/80718582