zoukankan      html  css  js  c++  java
  • linux进程管理-定时定期执行任务

     0.计划任务的命令:

       at  安排作业在某一时刻执行

       batch  安排作业在系统负载不重时执行

       crontab 安排周期性运行的作业

      

    1.at命令用法:

       安排命令或者多个命令在指定的时间运行一次

     语法;

      at [-f filename] 时间

      at -d or atrm   删除队列中的任务

      at -l 或者 atq  查看队列中的任务

     1.1 at指定时间的方式(前提是开启atd服务,所以需要查看系统是否开启atd服务)

    绝对计时方法;

      midnight noon  teatime

      hh:mm[today]

       hh:mm tomorrow

       hh:mm 星期

       hh:mm MM/DD/YY

     相对计时方法:

      now +n minutes

      now +n hours

       now +n days

    例如:

     

     1.2  at用法:

    1.安排定时任务

    例如:10分钟以后发个广播:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# at now +10 minutes  #用相对时间
    at> /usr/bin/wall < /etc/motd<EOT>      #输入命令之后Ctrl+D保存任务

    注意:

      (1)命令要用绝对路径。

      (2)能使用at定时任务的前提是开启atd服务,所以需要查看系统是否开启atd服务:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# ps -le|grep atd
    4 S     0   529     1  0  80   0 -  6460 hrtime ?        00:00:00 atd

     2.查看以及删除定时任务

    • 定时任务原理:

     我们安排了一个定时任务实际上是将我们的命令保存在/var/spool/at/目录下面:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# ls /var/spool/at/  #查看目录下文件
    a0000301832fd6  spool  
    [root@iz2ze46xi6pjjj69ailg9lz ~]# tail -5 /var/spool/at/a0000301832fd6  #查看文件内容
             exit 1
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER2474a99d'
    /usr/bin/wall  < /etc/motd
    marcinDELIMITER2474a99d

       我们发现linux实际上将我们的定时任务放在文件末尾,在前面做了一系列的读取环境变量的操作,也就是我们的定时任务是在文件的末尾写着的。

    • 查看与删除定时任务:
    [root@iz2ze46xi6pjjj69ailg9lz ~]# atq
    [root@iz2ze46xi6pjjj69ailg9lz ~]# at now +5 minutes  #新增一个任务
    at> /usr/bin/wall gggg<EOT>
    job 4 at Sat Mar 31 15:23:00 2018
    [root@iz2ze46xi6pjjj69ailg9lz ~]# at now +10 minutes  #新增一个任务
    at> /usr/bin/wall secondwall<EOT>
    job 5 at Sat Mar 31 15:29:00 2018
    [root@iz2ze46xi6pjjj69ailg9lz ~]# atq    #查看定时任务
    5       Sat Mar 31 15:29:00 2018 a root
    4       Sat Mar 31 15:23:00 2018 a root
    [root@iz2ze46xi6pjjj69ailg9lz ~]# at -l  #查看任务方法二
    5       Sat Mar 31 15:29:00 2018 a root
    4       Sat Mar 31 15:23:00 2018 a root
    [root@iz2ze46xi6pjjj69ailg9lz ~]# at -d 5  #移除序号是5的任务
    [root@iz2ze46xi6pjjj69ailg9lz ~]# atq
    4       Sat Mar 31 15:23:00 2018 a root
    [root@iz2ze46xi6pjjj69ailg9lz ~]# atrm 4  #移除序号是4的任务

    3.at配置文件限制哪些用户可以使用at命令:

        /etc/at.allow

        /etc/at.deny

    规则:

      如果/etc/at.allow文件存在,那么只有列在此文件中的用户才可以使用at命令;

       如果/etc/at.deny文件存在,那么只有列在此文件中的用户才不可以使用at命令;

      如果两个文件都不存在,那么只有超级用户才可以使用at命令;

      如果两个文件都存在且都为空,那么所有人可以使用at命令。

    2.batch命令用法:

      用法与功能与at一样,只是它会检查系统负载值,负载较轻才会执行任务(一般为0.8以下为较轻)。负载值就是我们用w或top查询时候的load average

     3.crontab周期性执行命令的用法:(依赖于crond进程)

        作用:用于生成cron进程所需要的crontab文件

    语法:

      crontab {-l | -e|-r}

       -l   显示当前的crontab

      -r  删除当前的crontab

      -e  使用编辑器编辑当前的crontab文件

    crontab -e格式: (时间值的填写方法:将知道的时间值填上,不知道的写上*。)

      分钟   小时    天    月    星期    命令/脚本

    例如:

    (1)每天凌晨四点备份文件:

      0  4  *  *  *  备份脚本

    (2)每个星期二和星期五下午六点备份文件

      0  18  *  *  2,5  备份脚本

    (3)一月到三月的星期2和星期五备份文件

       0  18  *  1-3  2,5  备份脚本

    (4)另一个需求,星期一到星期五的17.30发一条广播,17.45所有电脑自动关机

      30  17  *  *  1-5  /usr/bin/wall < news.txt

      45  17  *  *  1-5  /sbin/shutdown -h now

    (5)3-6月和9-12月每个星期的星期1到星期5的12点到下午2点每隔2分钟执行一次备份脚本

       */2  12-14  *  3-6,9-12  1-5  /bin/cp /root/data/ -r /root/data.bak 2> /root/bak.err 

       上面将错误的信息重定向到/root/bak.err文件夹中

    总结:时间范围用-,多个时间用,逗号隔开,没两分钟可以在分钟处*/2,每两小时在天的位置*/2.

    总结:

      (1)这些选项都不能为空,必须填入

      (2)如果不知道具体的值用*代替

      (3)每个时间段可以指定多个值,用逗号隔开;时间范围的话用-

      (4)命令应该给出绝对路径

      (5)用户必须具有运行所对应的命令或程序的权限。

    1.周期性任务的例子:

    (1)每隔3分钟发送一条广播,内容从news.txt读取

    [root@iz2ze46xi6pjjj69ailg9lz ~]# crontab -e

    输入内容如下,输入完成之后保存即可:

    */3 * * * 6 /usr/bin/wall < /root/news.txt

    保存之后可以到/var/spool/cron/目录下查看

    [root@iz2ze46xi6pjjj69ailg9lz cron]# pwd
    /var/spool/cron
    [root@iz2ze46xi6pjjj69ailg9lz cron]# cat root
    */3 * * * 6 /usr/bin/wall < /root/news.txt

    定时执行的原理:

      将我们写的命令保存到/var/spool/cron/目录下,以用户命名,然后定期执行文件,我们也可以手工编辑这个文件。

    (2)其他例子:

    2.查看周期性任务的两种方式: 

    [root@iz2ze46xi6pjjj69ailg9lz cron]# cat /var/spool/cron/root  #直接读取文件
    */3 * * * 6 /usr/bin/wall < /root/news.txt
    */1 * * * * /usr/bin/ls
    [root@iz2ze46xi6pjjj69ailg9lz cron]# crontab -l  #用crontab命令读取
    */3 * * * 6 /usr/bin/wall < /root/news.txt
    */1 * * * * /usr/bin/ls
    [root@iz2ze46xi6pjjj69ailg9lz cron]#

    3.删除周期性任务的两种方式

     第一种:直接删除所有的任务

    [root@iz2ze46xi6pjjj69ailg9lz cron]# crontab -r
    [root@iz2ze46xi6pjjj69ailg9lz cron]# crontab -l
    no crontab for root

    第二种:编辑/var/spool/cron/root文件,删除指定行也就完成了删除任务

    注意:crond周期执行任务依赖于crond进程,因此需要开启crond进程:

    [root@iz2ze46xi6pjjj69ailg9lz ~]# pkill crond  #杀掉进程
    [root@iz2ze46xi6pjjj69ailg9lz ~]# ps -le | grep crond
    [root@iz2ze46xi6pjjj69ailg9lz ~]# which crond
    /usr/sbin/crond
    [root@iz2ze46xi6pjjj69ailg9lz ~]# crond  #开启crond进程
    [root@iz2ze46xi6pjjj69ailg9lz ~]# ps -le | grep crond
    1 S     0 22973     1  0  80   0 - 31554 hrtime ?        00:00:00 crond

    4.crontab的配置文件: /etc/crontab文件   介绍了配置文件的格式

    [root@iz2ze46xi6pjjj69ailg9lz /]# cat /etc/crontab #查看/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,f
    ri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    0 */6 * * * root /bin/wipefs

    5.     /etc/下面有每周、每天和每日执行的脚本文件夹,我们将一个脚本放进去即可实现对应的执行脚本:

    [root@iz2ze46xi6pjjj69ailg9lz etc]# ll /etc/ | grep cron
    -rw-------.   1 root root      541 Mar 31  2016 anacrontab
    drwxr-xr-x.   2 root root     4096 Aug 18  2017 cron.d
    drwxr-xr-x.   2 root root     4096 Aug 18  2017 cron.daily
    -rw-------.   1 root root        0 Mar 31  2016 cron.deny
    drwxr-xr-x.   2 root root     4096 Jun 10  2014 cron.hourly
    drwxr-xr-x.   2 root root     4096 Jun 10  2014 cron.monthly
    -rw-r--r--.   1 root root      480 Jan 21 08:26 crontab
    drwxr-xr-x.   2 root root     4096 Jun 10  2014 cron.weekly

    centos7,调用执行上面每日、每月、每周文件夹下面的脚本是在:/etc/anacrontab通过anacron在调用

    [root@iz2ze46xi6pjjj69ailg9lz etc]# cat /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

    6.限定哪些用户可以使用crond命令:

      /etc/cron.allow

      /etc/cron.deny

    规则:

      如果/etc/cron.allow文件存在,那么只有列在此文件中的用户才可以使用at命令;

       如果/etc/cron.deny文件存在,那么只有列在此文件中的用户才不可以使用at命令;

      如果两个文件都不存在,那么只有超级用户才可以使用at命令;

      如果两个文件都存在且都为空,那么所有人可以使用at命令。

  • 相关阅读:
    Traits——信息输入界面
    Traits——安装/第一个界面
    opencv——如何安装opencv—python
    python——如何将列表中的元素全部取出来变成列表
    Pandas——循环路径下的文件将所有的txt文件进行合并
    股票交易
    良知?
    同源策略
    同步 异步 阻塞 非阻塞
    线程安全
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8683139.html
Copyright © 2011-2022 走看看