• Linux计划任务之at和cron


    at命令用于在指定时间执行命令,一次性命令。

    at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。

    假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。

    用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

    上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。

    指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

    启动atd:

    systemd start atd  启动

    systemd enable atd  开机自启

    systemd status atd   查看状态


    语法
    选项
    -f:指定包含具体指令的任务文件;
    -q:指定新任务的队列名称;
    -l:显示待执行任务的列表,相当于atq
    -d:删除指定的待执行任务,相当于atrm

    -r:删除系统中的at任务列表,相当于atrm

    -c:列出后续at任务的具体指令内容

    -m:任务执行完成后向用户发送E-mail。

    在设置at任务后,会在/var/spool/at目录生成at任务计划的文件,执行顺序文件名按数字或字母的排序进行


    参数

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

    【可以使用绝对时间,也使用相对时间

    绝对时间:at 10:00 ls /tmp

    相对时间:at now+5minutes ls /tmp】

    例子:

    1、在明天十点钟执行任务

    root@debian:~#
    root@debian:~# at 10:00 tomorrow
    warning: commands will be executed using /bin/sh
    at> ls /etc/passwd > /home/guest/passwd_10
    at> <EOT>
    job 11 at Fri Apr 27 10:00:00 2018
    root@debian:~# date
    Thu Apr 26 05:21:12 EDT 2018
    root@debian:~#

    2、在5天后的上午5点执行任务

    root@debian:~# at 5am+5days
    warning: commands will be executed using /bin/sh
    at> ls /etc/passwd > /home/guest/passwd_5
    at> ls /etc/group > /home/guest/group_5
    at> <EOT>
    job 10 at Tue May  1 05:00:00 2018
    root@debian:~#
    root@debian:~# date
    Thu Apr 26 05:18:51 EDT 2018
    root@debian:~#

    计划任务设定后,在没有执行之前我们可以用atq (q:queue 队列)命令来查看系统没有执行工作任务:

    root@debian:~# atq
    8       Thu Apr 26 10:00:00 2018 a root
    9       Fri Apr 27 10:00:00 2018 a root
    11      Fri Apr 27 10:00:00 2018 a root
    6       Thu Apr 26 10:00:00 2018 a root
    10      Tue May  1 05:00:00 2018 a root
    root@debian:~#

    删除任务:atrm number

    root@debian:~# atq
    8       Thu Apr 26 10:00:00 2018 a root
    9       Fri Apr 27 10:00:00 2018 a root
    11      Fri Apr 27 10:00:00 2018 a root
    6       Thu Apr 26 10:00:00 2018 a root
    10      Tue May  1 05:00:00 2018 a root
    root@debian:~#
    root@debian:~# atrm 11
    root@debian:~# atq
    8       Thu Apr 26 10:00:00 2018 a root
    9       Fri Apr 27 10:00:00 2018 a root
    6       Thu Apr 26 10:00:00 2018 a root
    10      Tue May  1 05:00:00 2018 a root
    root@debian:~#

    查看已经设置的任务内容: at -c number  (number为队列号)

    如: at -c 8   

    m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;3   6:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=0   0;36:*.xspf=00;36:; export LS_COLORS
    SSH_CONNECTION=192.168.9.132 65170 192.168.9.119 22; export SSH_CONNECTION
    LANG=en_US.UTF-8; export LANG
    OLDPWD=/lib/modules/4.9.0-6-686-pae; export OLDPWD
    XDG_SESSION_ID=3; export XDG_SESSION_ID
    USER=root; export USER
    PWD=/root; export PWD
    HOME=/root; export HOME
    SSH_CLIENT=192.168.9.132 65170 22; export SSH_CLIENT
    SSH_TTY=/dev/pts/0; export SSH_TTY
    MAIL=/var/mail/root; export MAIL
    SHLVL=2; export SHLVL
    LOGNAME=root; export LOGNAME
    XDG_RUNTIME_DIR=/run/user/1000; export XDG_RUNTIME_DIR
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH
    cd /root || {
             echo 'Execution directory inaccessible' >&2
             exit 1
    }
    cat /etc/passwd > /tmp/passwd_file
    
    root@debian:~# at -c 8 > /tmp/at_queue_8
    root@debian:~#
    root@debian:~#
    root@debian:~# clear
    root@debian:~# less /tmp/at_queue_8
    01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:; export LS_COLORS
    SSH_CONNECTION=192.168.9.132 65170 192.168.9.119 22; export SSH_CONNECTION
    LANG=en_US.UTF-8; export LANG
    OLDPWD=/lib/modules/4.9.0-6-686-pae; export OLDPWD
    XDG_SESSION_ID=3; export XDG_SESSION_ID
    USER=root; export USER
    PWD=/root; export PWD
    HOME=/root; export HOME
    SSH_CLIENT=192.168.9.132 65170 22; export SSH_CLIENT
    SSH_TTY=/dev/pts/0; export SSH_TTY
    MAIL=/var/mail/root; export MAIL
    SHLVL=2; export SHLVL
    LOGNAME=root; export LOGNAME
    XDG_RUNTIME_DIR=/run/user/1000; export XDG_RUNTIME_DIR
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH
    cd /root || {
             echo 'Execution directory inaccessible' >&2
             exit 1
    }
    cat /etc/passwd > /tmp/passwd_file
    View Code

    允许和拒绝用户使用at命令的两个文件:/etc/at.allow 和 /etc/at.deny:

    /etc/at.allow 和 /etc/at.deny :

    /etc/at.allow:at任务计划的白名单,仅允许此文件中的用户执行at

    /etc/at.deny:at任务计划的黑名单,仅拒绝此文件中的用户执行at

    系统先查找/etc/at.allow ,然后再去查找/etc/at.deny ,如果两个文件都没有,只有root用户执行at

    ---------------------------------------------------------------------------------------------

    cron命令用于在循环执行命令,周期性命令。

    Linux系统则是由cron(crond)这个系统服务来控制的。Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外,由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab 命令。

    一:crond简介

    crond是Linux下用来周期性的执行某种任务或等待处理某些事情的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否由要执行的任务,如果有要执行的任务,则自动执行该任务。

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

    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

    cron相关配置文件:

    /etc/crontab:cron配置文件

    /etc/cron.d/:cron辅助配置文件

    /var/spool/cron:用户cron任务计划的配置文件,用户设置完cron任务后,会在/var/spool/cron目录下生成以用户名名称的cron文件

    /etc/crontab文件:设置/查看/删除等cron任务计划,执行结果以邮件方式发送给任务发起者:

    [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
    
    [root@localhost ~]#

     /etc/crontab 文件解析:前三行是用来配置crond任务运行的环境变量,第一行SHELL变量指定系统使用哪个shell,第二行PATH变量指定系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给谁,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。最后几行对计划任务的格式进行详细的介绍。

    crontab用法:

    选项:

    -e:编辑cron任务内容

    -u:为指定用户设置cron任务计划(只有root用户能够使用)

    -l:查看cron任务列表

    -r:删除所有的cron列表

      时间的特殊写法:

    通配符*:代表任意时间

    【实例:10 12 * * * ls /tmp

    意思是:每天12点10分执行ls /tmp命令】

    离散时间段,(逗号):

    【实例:5,10,15,40 10 * * * ls /tmp

    意思是:每天10点5分、10分、15分和40分钟时 执行ls /tmp命令】

    连续时间段-(中横线):

    【实例:00 22 * * 1-5 ls /tmp

    意思是:每周一到周五的22点执行ls /tmp

    也可以这样写:

    00 22 * * 1,2,3,4,5 ls /tmp 】

    间隔时间段 */n:每个n就执行一次

    【实例一:*/5 * * * * ls /tmp

    意思是:每隔5分钟就执行一次 ls /tmp

    实例二:00 10 */5 * * ls /tmp

    意思是:每隔5天,在10点就执行一次 ls /tmp   ----注意:主要设置具体时间点】

    ----------------------------------

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

    使用者权限文件:

    /etc/cron.deny:该文件中所列用户不允许使用crontab命令,默认情况下系统只保留该文件

    /etc/cron.allow:该文件中所列用户允许使用crontab命令

    /var/spool/cron:所有用户crontab文件存放的目录,以用户名命名

    crontab文件含义:

    系统任务调度:minute hour day month week user command

    用户任务调度:minute hour day month week command

    区别在于:系统任务调度可以指定用户指定,而用户任务调度只能该用户执行

  • 相关阅读:
    Auto.js实现自动刷视频,点赞脚本(一)
    C# 将excel文件导入到SqlServer数据库
    JavaScript实现HTML导航栏下拉菜单[悬浮显示]
    补码的知识
    指针06 零基础入门学习C语言46
    指针05 零基础入门学习C语言45
    标志寄存器01 零基础入门学习汇编语言54
    标志寄存器02 零基础入门学习汇编语言55
    标志寄存器02 零基础入门学习汇编语言55
    标志寄存器01 零基础入门学习汇编语言54
  • 原文地址:https://www.cnblogs.com/relax1949/p/8953886.html
Copyright © 2020-2023  润新知