20150905 Linux任务计划

  • 任务计划

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

    周期性执行某任务:crontab

    at和crontab实现以邮件服务发给系统

    目前系统每个用户都有邮件地址,邮件服务会启动25 port ss -tnl

     下图为127.0.0.1:25,只能够给本机本身

clip_image001

  • 电子邮件服务:

定义:

   smtp:simle mail transmision protocol 邮件发送

   /var/spool/mail/USERNAME :每个用户都有邮箱服务

clip_image002

   pop3:post office protocol 邮件接收

   imap4:收邮件internet mail access prococol

   mail命令使用:control+d提交

命令格式

NAME
   mailx - send and receive Internet mail
SYNOPSIS
mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . .
mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name]
mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]

     直接mail: 进入交互式邮件收发接口

mail -s "subject" username@hostnmae 邮件内容要交互式提供

输入重定向 mail -s "subject" username@hostname< /path/from/somefile

command| mail -s "subject" username@hostnmae

示例

mail -s "hi" root@localhost -s表示标题

clip_image003

  • at命令

   承载未来时间运行的某作业,支持使用作业队列方式

默认队列标识符a后面可以为相对时间或绝对时间

    at now+3minute 在后面后三分钟(指提交任务)

     control+d提交任务

clip_image006

命令格式:

    at [-V] [-q queue] [-f file] [-mMlv] timespec...

    at [-V] [-q queue] [-f file] [-mMkv] [-t time]

   at -c job [job...]

   atq [-V] [-q queue]

   at [-rd] job [job...]

   atrm [-V] job [job...]

     -q queue at作业队列

      -f /path/from/somefile:从指定位置文件中读取要运行的作业

      -l 查看作业队列中等运行作业列表,相当于atq

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

   mail建议使用绝对路径

       -d 删除 at -d 3 删除第三个队列的 相当于atrm

  • at的时间表示方式

(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 午餐 moon teatime下午4点

at 15:35 后面为交互式

image

At -l显示当前队列 a 队列,

image

  • Batch:

     由系统自行选择在资源较为空间时运行指定的任务,与at基本类似

  • Crontab

  周期性任务计划,at只能够在某个时间点运行一次

  crontab需要通过使用守护进程 crond( 检查时间表是否应该运行一次)

  crond以管理员运行

周期性计划有二类:

(1)系统cron任务,无默认运行用户身份,需要额外运行者 /etc/crontab中直接

VIM命令,不推荐使用

      [root@centos71 mail]# 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

共七个字段组成:前五个字段时间点

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

    command to be executed要运行任务

(2)用户cron任务,由某个用户提交,默认以提交者运行,无需要额外指定运行者

/var/spool/cron/USERNAME与用户同步、不建议使用VIM

crontab命令:建议,编辑自己的守护任务

用户只有6个字段,与系统相比无用户

[root@centos71 mail]# 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

# | | | | |

# * * * * * command to be executed

5个时间点    分钟:有效范围0-59

          小时:0-23

          日(每个月内日期)1-31

          月 1-12

          周几(0-7)

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

   例如3月6日,周2,并不是每年3月6日为周2

6 * * * * *表示每的,五个之间与的关系,要同时满足

大时间点取星号(每个范围可用值)

时间点表示法:

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

   6 : 数字本身为既定时间点 如6表示6分(每天)。。

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

   , :表示一个离散的时间3,5,7 (如分钟表示3,5,7,分钟)

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

  1-30/4 表示 1-30内每4分钟一次 */4每4小时一次

示例

  5 */3 * * * /bin/ech "howdy" 每三小时运行一次后面的命令 :备注:第1位需要指定数值,才有每之意

  5 7 * * 1-5 周一周五,每点7点5分,运行后面任务

执行结果以邮件方式发送给客户  /bin /usr/bin /sbin /usr/sbin

  controntab只能使用以上路径的使用,建议使用绝对路径

image

 crontab命令

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

      -u user:不是管理自己的cron任务,而是指定的目标用户

      -l列出任务

      -e 默认是vim编辑器

      -r 清空所有任务

只能以管理员查看所有

  示例:

1、实现实现每8分钟运行一次任务? 要整除无精确时间运行,最后一次可以不同

这里*/8 60/8 无法整除,剩4,解决sleep

2、每10秒运行一次任务?crontab只支持分钟,不支持秒,要使用sleep命令

补助工具:anacron 定期检查任务,如果指定时间未执行,不管是否在

时间点,要立即或指定时间运行一次!,默认未启动!服务器中未执行

clip_image013

注意:如果不想接受任务执行结果的通知邮件

command>/dev/null 成功

command &>/dev/null 不管是否成功

(2)对于crontab文件中有%有特殊功能,如果使用中出现%,需要使用转义,或用单

引号' '对其引用'%'

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

如果使用可考虑使用export

Cat /etc/crontab

clip_image014

  • 练习:

1、每周1至周六的凌晨3点20分,运行tar命令对/etc/目录进行归档另存

存储位置为/backup/etc-yyyy-mm-dd.tar.xz

   xz /path/to/somefile  

     -d  解压    xz �Cd test.tar.xz

     -#:1-9 默认是6

     -k:压缩时保留文件

tar实现归档工具,只归档不压缩  cf  xf  tf

     -c创建归档文件

     -f 后面必须有参数,指定文件名,文件名为*.tar

     -x展开归档

     --xattrs在归档同时保护其扩展属性信息

     -t不展开归档,直接查看归档了那些文件

归档后压缩  xz  文件名.tar 

     -zcf 直接调用即归档再压缩,调用gzip

     -zxf  调用gzip解压缩并归档

     -jcf: bzip2  直接调用即归档再压缩

     -jxf:

     -Jcf:xz  直接调用即归档再压缩

     -Jxf:  直接调用即归档再压缩

         

tar -jcvf /tmp/51ctobak/etc-`date +\%Y-\%m-\%d`.tar.xz /etc

  

 其中“+%Y-%m-%d”可以使用%F    
  crontab时间格式:  20 3 * * 1-6 ,在使用crontab编辑时注意使用转意符

image

2、每周日凌晨2点30分,运行cp命令对/etc/fstab进行文件备份,存储位置为

/backup/fstab-yyyy-mm--dd-hh--mm-ss

   cp -a /etc/fstab /tmp/51cto/fstab-`date +%Y-%m-%d-%H-%M-%S`

    crontab时间格式   30 2 * * 7

image

3、每天晚上12点,取得/proc/meminfo文件中所有以s或m开头的行,追加至

/statistics/meminfo.txt文件中且每天的消息之前,要加上类似===============分隔线;

grep -o '^[S,M].*' /proc/meminfo 以S或M开关的行
[root@centos71 ~]# echo "===============================" >>
/statistics/meminfo.txt &&  grep  '^[S,M].*' /proc/meminfo >> /statistics/meminfo.txt

输出:

image

  编辑crontab时间格式   0 0 * * *

image

你可能感兴趣的:(linux,计划,target,blank,周期性)