码迷,mamicode.com
首页 > 系统相关 > 详细

linux之at batch crontab命令

时间:2016-08-11 22:53:53      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:linux之at batch crontab命令

Linux任务计划、周期性任务执行

    未来的某时间点执行一次任务:at, batch
    周期性运行某任务: cron

    电子邮件服务:
        smtp: simple mail transmission protocol, 用于传送邮件;
        pop3: Post Office Protocol
        imap4:Internet Mail Access Protocol

        mailx - send and receive Internet mail

            MUA:Mail User Agent

            mailx [-s ‘SUBJECT‘] username[@hostname]
                邮件正文的生成:
                    (1) 直接给出,Ctrl+d;
                    (2) 输入重定向;
                    (3) 通过管道;
                        echo -e "How are you?\nHow old are you?" | mail

            mailx
[root@slave ~]# mail -s ‘ssss‘ root@localhost
EOT
Null message body; hope that‘s ok
[root@slave ~]# mail

    at命令:

        at [option] TIME

            TIME:
                HH:MM [YYYY-mm-dd]
                noon, midnight, teatime
                tomorrow
                now+#{minutes,hours,days, OR weeks}

            常用选项:
                -q QUEUE:
                -l: 列出指定队列中等待运行的作业;相当于atq
                -d: 删除指定的作业;相当于atrm
                -c: 查看具体作业任务;
                -f /path/from/somefile:从指定的文件中读取任务;

            注意:作业的执行结果以邮件通知给相关用户;
[root@MyServer ~]# at 20:44
at> ls /var
at> cat /etc/fstab
at> <EOT>
job 1 at 2016-08-10 20:44

ctrl+d

[root@slave ~]# at -l
You have mail in /var/spool/mail/root
[root@slave ~]#
[root@slave ~]# atq


    batch命令:
        让系统自行选择空闲时间去执行此处指定的任务;

    周期性任务计划:cron
        相关的程序包:
            cronie: 主程序包,提供了crond守护进程及相关辅助工具;
            cronie-anacron:cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务;
            crontabs:包含CentOS提供系统维护任务;

            确保crond守护处于运行状态:
                CentOS 7:
                    systemctl status crond
                        ...running...
                CentOS 6:
                    service crond status

        计划要周期性执行的任务提交给crond,由其来实现到点运行。
            系统cron任务:系统维护作业
                /etc/crontab
            用户cron任务:
                crontab命令
[root@slave ~]# rpm -qa  |grep cron
crontabs-1.10-33.el6.noarch
cronie-1.4.4-12.el6.x86_64
cronie-anacron-1.4.4-12.el6.x86_64


[root@slave ~]# rpm -qi cronie

[root@slave ~]# service crond status
crond (pid  2014) is running...

            系统cron任务
                # 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    

                例如:晚上9点10分运行echo命令;
                    10 21 * * *     gentoo /bin/echo "Howdy!"

                时间表示法:
                    (1) 特定值;
                        给定时间点有效取值范围内的值;
                    (2) *
                        给定时间点上有效取值范围内的所有值;
                        表示“每...”;
                    (3) 离散取值:,
                        #,#,#
                    (4) 连续取值:-
                        #-#
                    (5) 在指定时间范围上,定义步长:
                        /#: #即为步长

                例如:每3小时echo命令;
                    0 */3 * * * gentoo /bin/echo "howdy!"

            用户cron:
                crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

                crontab命令:
                    crontab [-u user] [-l | -r | -e] [-i]
                        -l: 列出所有任务;
                        -e: 编辑任务;
                        -r: 移除所有任务;
                        -i:同-r一同使用,以交互式模式让用户有选择地移除指定任务;

                        -u user: 仅root可运行,代为为指定用户管理cron任务;

            注意:运行结果以邮件通知给相关用户;
                (1) COMMAND > /dev/null
                (2) COMMAND &> /dev/null

                对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义;

            思考:
                (1) 如何在秒级别运行任务?
                    * * * * * for min in 0 1 2; do echo "hi"; sleep 20; done
                (2) 如何实现每7分钟运行一次任务?

                sleep命令:
                    sleep NUMBER[SUFFIX]...

                        SUFFIX:
                            s: 秒, 默认
                            m: 分
                            h: 小时
                            d: 天

        练习:
            1、每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”;

            2、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”;

            3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中;

            4、工作日时间内,每小执行一次“ip addr show”命令;
[root@slave ~]# cat /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


本文出自 “梁小明的博客” 博客,请务必保留此出处http://7038006.blog.51cto.com/7028006/1837076

linux之at batch crontab命令

标签:linux之at batch crontab命令

原文地址:http://7038006.blog.51cto.com/7028006/1837076

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!