Linux上的任务计划:

 

任务计划分类:

在未来时间点一次性执行某任务:at, batch

周期性执行某任务: crontab

 

电子邮件服务:

   邮件协议种类:

    smtp: simple mail transmission protocol 简单邮件传输协议

         /var/spool/mail/USERNAME

 

     pop3: post office protocol 邮局协议

     imap4: internet mail access protocol 邮件传送协议

邮件收发:

     mail服务启动与否状态查询 #netstat -tnl | grep “:25\>”

     默认收发邮件仅在本机的用户间进行,且只能通过回环接口上的地址进行。

 

      mail命令使用方法:

mail: 进入交互式收发邮件接口;q:退出  N:查看第N封邮件

[root@localhost ~]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 1 message 1 unread                                           
>U  1 root                  Tue Sep  8 09:45 166/1901  "Output from your job        6"
& 1                                                                             
Message  1:                                                                      
From root@localhost.localdomain  Tue Sep  8 09:45:00 2015
Return-Path: <root@localhost.localdomain>

        

         mail -s 'SUBJECT' username@hostname:可使用-s指定主题发送至目标邮箱

 

[root@localhost ~]# su -l user1
[user1@localhost ~]$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/user1": 1 message 1 new
>N  1 root                  Tue Sep  8 09:54  18/628   "hello"

 

 

 

mail -s 'SUBJECT' username@hostname < /PATH/FROM/SOMEFILE:使用文件重导向获取信息

[root@localhost ~]# su -l user1
[user1@localhost ~]$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/user1": 2 messages 1 new 2 unread
 U  1 root                  Tue Sep  8 09:54  19/638   "hello"
>N  2 root                  Tue Sep  8 09:58  18/638   "hello"

COMMAND | mail -s 'SUBJECT' username@hostname:使用管道命令获取信息

 

 

 

at命令:

承载未来时间运行的某作业:

 

     支持使用作业队列:

     默认为a队列;

     命令使用格式:at [option]... TIME

 

[root@localhost ~]# at 09:15
at> ls /etc
at> <EOT>
job 3 at 2003-01-01 09:15
 
   Ctrl+d:任务提交

        TIME:

          (1) 绝对时间

              HH:MM,

              MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD

              tomorrow

          (2) 相对时间

              now+#UNIT

              minute, hour, day, week

          (3) 模糊时间

              midnight

              noon

             teatime

 

        常用选项:

             -q QUEUE: at作业队列;

             -f /PATH/FROM/SOMEFILE:从指定的文件中读取要运行的作业;

             -l: 查看作业队列中的等运行作业列表;相当于使用atq命令;

             -c AT_JOB_NUM: 查看待运行作业的内容;

             -d: 删除指定作业;相当于atrm

 

batch:

        由系统自行选择在资源较为空闲时运行指定的任务;

 

crontab:周期性任务计划

    守护进程:crond

 

    周期性任务有两类:

         (1) 系统cron任务;没有默认运行用户身份,所以需要额外指定运行者;

            /etc/crontab

 

            vim命令

 

          # 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

 

     7个字段:

         前5个字段:时间点

         user-name: 以哪个用户的身份运行任务

         command to be executed: 要运行任务

 

        (2) 用户cron任务:由某个用户所提交,默认就以提交者的身份运行,所以无需额外指定运行者;

           /var/spool/cron/USERNAME

 

         vim命令;不建议

         crontab命令:建议

 

         # 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

         # |  |  |  |  |

         # *  *  *  *  *  command to be executed

 

     5个时间点:

        分钟:有效取值范围0-59;

        小时:0-23

        日:1-31

        月:1-12

        周几:0-7

 

        注意:几月几号与周几,不建议同时使用;

 

        例如:

          6 * * * *   表示每小时的第6分钟

 

 

     时间表示法:

 

        *: 对应时间点有效取值范围内的每个时间点;

        -: 一个特定连续时间范围, 3-7

        ,:一个离散的时间点, 3,5,7

        /#:有效时间范围内的每多少时间;用于指定频率;

         1-30/4, */4

 

         5 */3 * * * /bin/echo "howdy":表示每3个小时的第5分钟执行一次

 

         5 7 * * 1-5 /bin/echo "howdy":表示周一至周五每天的7点5分执行一次

 

crontab命令:

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

        -u user: 不是管理自己的cron任务,而是指定的目标用户的cron任务;仅root拥有管理其它用户的cron 任务的权限;默认管理自己的;

 

        -l: list,列出任务;

        -r: remove, 移除所有任务;

        -e: edit,编辑,打开一当前shell会话的默认编辑器来编辑cron任务表;

 

思考:

1、如果想实现每8分钟运行一次某任务?

      */8 * * * *

2、如果想实现每10秒钟运行一次某任务?

     需使用其他例如脚本实现

 

 

补充性的工具:anacron:

 

注意:

(1) 如果不想接收任务执行结果的通知邮件:

COMMAND > /dev/null

COMMAND &> /dev/null

(2) 对于crontab文件来讲,%有特殊功用;如果命令中会出现%, 要记得转义,或者用单引号对其引用;

(3) crontab的PATH变量与用户的变量不完全相同,所以,建议在cron中的任务要使用绝对路径

/root/bin/a.sh

 

练习:

1、每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD;

    20 3 * * 1-6 /bin/cp -a /etc /backup/fstab-$(date +'%Y-%m-%d')  注:/backup目录需事先存在

 

2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss

  30 2 * * 7  /bin/cp -a /etc/fstab /backup/fstab-(date +'%Y-%m-%d-%H-%M-%S')   注:/backup目录需事先存在

 

3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线;

  1 24 * * * /bin/echo '=============' >> /statistios/meminfo.txt| /bin/grep '^[SM]' /proc/meminfo >> /statistios/meminfo.txt

注:/statistics/meminfo.txt需事先存在

 

[root@localhost ~]# echo '==============' >> /statistios/meminfo.txt| grep '^[SM]' /proc/meminfo >> /statistios/meminfo.txt

[root@localhost ~]# cat /statistios/meminfo.txt

MemTotal:        1021332 kB

MemFree:          822572 kB

SwapCached:            0 kB

Mlocked:               0 kB

SwapTotal:       4194296 kB

SwapFree:        4194296 kB

Mapped:             8456 kB

Shmem:              5508 kB

Slab:              36904 kB

SReclaimable:       8484 kB

SUnreclaim:        28420 kB

============================

MemTotal:        1021332 kB

MemFree:          822448 kB

SwapCached:            0 kB

Mlocked:               0 kB

SwapTotal:       4194296 kB

SwapFree:        4194296 kB

Mapped:             8456 kB

Shmem:              5508 kB

Slab:              36908 kB

SReclaimable:       8484 kB

SUnreclaim:        28424 kB