首页 > 代码库 > linux-任务计划at,cron

linux-任务计划at,cron

任务计划


1、在未来的某个时间点执行一次任务

    at

    batch


    at 时间

    at>command

    at>ctrl+d


    指定时间

        绝对时间: HH:MM DD.MM.YY  MM/DD/YY

        相对时间: now+#

            单位:mininus,hours,days,weeks

        命令的执行结果:将以邮件的形式发送给安排任务的用户


[root@localhost ~]# at now+3minutes
at> ls /var
at> cat /etc/fstab<EOT>
job 1 at 2017-03-21 07:30
[root@localhost ~]# date
Tue Mar 21 07:28:24 PDT 2017
[root@localhost ~]# at now+10minutes
at> cat /etc/issue
at> <EOT>
job 2 at 2017-03-21 07:38

[root@localhost ~]# at -l
2 2017-03-21 07:38 a root   (a为队列名称,默认为a)
1 2017-03-21 07:30 a root
[root@localhost ~]#


删除任务:at -d job_id =atrm job_id

[root@localhost ~]# at now+3minutes
at> ls /etc/fstab
at> <EOT>
job 3 at 2017-03-21 07:51
[root@localhost ~]# at -l
3 2017-03-21 07:51 a root
[root@localhost ~]# at -d 3
[root@localhost ~]# at -l
[root@localhost ~]#


黑名单:/etc/at.deny

白名单:/etc/at.allow (at.allow优先级高与at.deny)


2、周期性地执行某个任务;不需要指定时间

    cron为一个不间断运行的服务

    anacron:cron补充,可以实现让cron因为各种原因在过去的时间执行而未执行的任务,恢复正常后执行一次


    系统cron任务

        /etc/crontab        


[root@localhost ~]# ls /etc/crontab
/etc/crontab
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly  (run-parts为脚本)
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

10,40 * * * * root run-parts /etc/cron.halfhourly

10,40 * * * 3,6 root run-parts /etc/cron.halfweekly

10,40 * * * 1-5 root run-parts /etc/cron.workdayly

(分钟 小时 天 月 周 用户 任务 )



分钟:0-59    小时:0-23    天:1-31    月:1-12    周:0-7

    时间通配符:

    *:对应所有的有效取值

    ,:离散时间点

    -:连续时间点

    /:对应取值范围内没多久    

    /#:对应取值范围内多久一次

        */3 * * * *  任务每3分钟一次


    执行结果将以邮件形式发送给管理员

    */3 * * * * cat /etc/fstab > /dev/null  接收错误结果 

    */3 * * * * cat /etc/fstab &> /dev/null  不接收任何结果    


    注意:cron的环境变量,执行的所有命令在PATH环境变量指定的路径下;

    PATH=/bin:/sbin:/usr/bin:/usr/sbin

    如果用户没有登陆,将没有PATH,使用绝对路径/bin/cat或者优先定义PATH环境变量


[root@localhost ~]# ls /etc/cron.daily/ 
0anacron  0logwatch  cups  logrotate  makewhatis.cron  mlocate.cron  prelink  rhsmd  rpm  tmpwatch

(0优先运行)



    用户cron任务

        /var/spool/cron/USERNAME

    (分钟 小时 天 月 周 任务 )

    用户任务的管理

        crontab -l 列出当前用户的cron任务

        crontab -e 编辑及校验语法错误

        crontab -r 移除所有cron任务

        crontab -u username:管理其他用户的cron任务


[root@localhost ~]# crontab -l
*/3 * * * * /bin/echo "how are you ?"
[root@localhost ~]# crontab -e
crontab: no changes made to crontab
[root@localhost ~]# crontab -e
crontab: no changes made to crontab
[root@localhost ~]# ls /var/spool/cron/root
/var/spool/cron/root
You have new mail in /var/spool/mail/root
[root@localhost ~]# cat /var/spool/cron/root
*/3 * * * * /bin/echo "how are you ?"
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
[root@localhost ~]#


    anacron任务

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


1 65 cron.daily  run-parts /etc/cron.daily      开机后65min,
7 70 cron.weekly  run-parts /etc/cron.weekly
30 75 cron.monthly  run-parts /etc/cron.monthly
[root@localhost ~]#


确保crond及anacron服务开启

[root@localhost ~]# service crond status
crond (pid  4376) is running...
[root@localhost ~]#

[root@localhost ~]# service anacron status
anacron is stopped
[root@localhost ~]#

[root@localhost ~]# chkconfig --list crond
crond           0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]# chkconfig --list anacron
anacron         0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]#

linux-任务计划at,cron