linux 任务计划,crontabat anacron

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 任务计划,crontabat anacron相关的知识,希望对你有一定的参考价值。

    有时候需要对系统进行一些重比较耗时占资源的系统维护工作,或一些重复的操作如每日备份等。最好的方法是把这些任务安排在深夜系统负载最小的时候。linux系统上常使用crontab、at 命令来实施计划任务。计划任务分为一次性计划任务,和周期性计划任务。

    一次性计划任务:任务只执行一次后不会再进行第二次

                可以使用的命令:at、bath

    周期性任务执行:重复执行相同的任务,直到用户删除此任务。

                可以使用的命令:crontab、anacron


at命令:

    交互式:让用户在at > 提示符输入多个要执行的命令;

    批处理:将任务的各需要执行的命令写入文件,由at进行调用


1、交互式计划任务

[[email protected] ~]# at now+3min   \\ 定义一个3分钟后执行的任务
at> ls /var   \\需要执行的命令,如果有多个可以用enter来换行继续输入
at> <EOT>  \\ ctrl+d
job 3 at 2016-03-18 09:08


2、批处理创建计划任务

使用-f 指定需要执行的脚本文件

[[email protected] ~]# at now+1min -f /root/backup.sh 
job 4 at 2016-03-18 09:17


3、查看作业队列

[[email protected] ~]# at -l
1    2016-03-18 09:30 a root
2    2016-03-18 09:40 a root
[[email protected] ~]# atq
1    2016-03-18 09:30 a root
2    2016-03-18 09:40 a root


4、删除作业

[[email protected] ~]# at -d 2   \\ 2表示为作业的编号
[[email protected] ~]# atq
1    2016-03-18 09:30 a root

任务计划的执行结果会通过邮件的方式发送给任务提交者;

模糊时间:
                now, noon正午, midnight午夜, teatime下午4点, tomorrow明天



**********************************

crontab 设置定时任务

crontab [-l | -r | -e | -u user]

常用选项:
        -l:查看自己的cron任务列表;
        -e:通过EDITOR变量中定义的编辑器打开用户自己的cron配置文件;
            编辑单独的任务都使用-e选项,无论是删除、修改还是新建;
        -r:移除crontab文件

        -u  UserName:为别的用户配置crontab作业,只有管理员才能执行此操作。

(a)、crontab任务计划需要依靠crond服务,要想任务计划生效需保计服务正常运行

# service crond status
crond (pid  1814) is running...


(b)、和crontab相关的几个常用的文件

    系统cron文件

            /etc/crontab
    用户cron文件:
        /var/spool/cron/UserName
    任务计划 黑名单列表

        对于不允许用户做任务计划的用户可以写入这个文件中

        /etc/at.deny 


 (c)、cron执行的结果对于那些没有用户的来说,执行成功后会发邮件给root用户,对于有些不需要收到邮件的可以通过输出重定向而拒收邮件:
    &> /dev/null
    > /dev/null 2>&1
    MAILTO=""



/etc/crontab文件:每行定义一个独立的任务;

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

    

文件中每一行的格式如下所示

分钟   小时   日期   月份   星期   命令

分钟: 从0~59之间的任何数整数。

小时:从0-23之间的任何整数。

日期:从1-31之间的任何整数。(如果指定的月份,则必须是该月份的有效日期)

月份:从1~12之间的任何整数。

星期:从0~7之间的任何整数(0和7都表示星期天),也可以使用sun,mon,tue,wed,thu,fri,sat。

在以上值中,可以使用 * 号表示所有值,如分钟的 *  号表示0~59之间的任何数。


时间表示法:
    1、每个时间位都应该使用其可用的有效取值范围内的值;
    2、某时间位上的*表示对庆应位的所有有效取值;
    3、-: 连续的时间相邻点取值;
    4、,: 离散的时间点取值;
    5、/#:表示在指定时间范围内每隔#一次;
        5-45/3 * * * *


注意1:如果在crontab的用户命令中使用%,得转义为\%

*/1 * * *  *  /bin/tar -Jcf /tmp/etc.`date +\%F-\%s`.tar.xz /etc/*

注意2:在crontab任务中的command最好使用完整的路径如/bin/tar



练习:
    1、每3分钟执行一个“echo "how are you?";

*/3 * * * * /bin/echo "how are you?"


    2、每周2、4、6备份/etc/目录至/backup目录中,备份的文件名以当etc_开头并跟上当日的日期作为文件名;

0 0 * * 2,4,6  /bin/tar -Jcf etc_`date +%F`.tar.xz /etc/*


    3、每天6、9、12、15、16、17、18查看一下当前系统挂载的所有文件系统,并将查看的结果追加至/tmp/mounts.txt文件中;

0 6,9,12,15-17 * * * /bin/mount >> /tmp/mounts.txt


    4、每天每两小时取当前系统内存空间余量,将其保存至/stats/memory.txt文件中;

0 */2 * * *  /bin/grep "MemFree:"  /proc/memoryinfo  >> /stats/memory.txt

 或

0 */2 * * * [ -d /stats ] || /bin/mkdir /stats ;/bin/grep "MemFree:" /proc/meminfo  >> /stats/meminfo.txt

   crontab文件的格式:
        空白行会被忽略
        # 开头的行是注释;


如何实现秒级别的任务:
    * * * * * for i in {0..4}; do /bin/echo "how are you?"; sleep 10; done
每21秒执行一个任务

像这种不是整数的时间,只能采用死循环的方式来进行

    while true:; do /bin/echo "how are you?" sleep 21; done

anacron: 最小刻度是天;
是crontab的补充,用于检查crontab中某任务在过去的一个周期内是否没有执行,
如果没有执行,则在开机以后的某时间点让其执行执行一次,无论其周期是否到达;
    2 3 * * * some_job

本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1752496

以上是关于linux 任务计划,crontabat anacron的主要内容,如果未能解决你的问题,请参考以下文章

linux计划任务管理

Linux--计划任务!

linux计划任务执行脚本显示乱码

linux脚本放到计划任务里面执行结果与手动运行不一致

Linux系统计划任务管理

linux-计划任务atcrontab