Linux计划任务

Linux计划任务

## 一、定义
计划任务是通过计划编排的方式,让指定任务在未来的指定时间执行一次或按时间周期多次执行,并且能够通过系统内部邮件的方式通知指定用户执行的结果。

## 二、计划任务的分类
从执行的特点来看,计划任务分为:

类别 | 含义 | 命令
—— | —— | ——
单次执行 | 在未来的某时间点执行一次某任务 | at,batch
周期执行 | 周期性运行某任务,执行结果会通过邮件发送给用户 | crontab

## 三、邮件服务基础知识
本地电子邮件服务
**发邮件**
smtp:simple mail transmission protocol
**收邮件**
pop3/imap4:  Post Office Protocol / Internet Mail Access Protocol

MUA:Mail User Agent,用户收发邮件的工作程序
mailx [-s ‘SUBJECT’] username[@hostname]
邮件正文的生成方式:
1. 交互式输入
.单独成行表示正文结束;Ctrl+d提交亦可
2. 通过输入重定向
~]# mail -s ‘fstab file’ root < /etc/fstab
3. 通过管道
~]# cat /etc/fstab | mail -s ‘fstab file’

## 四、计划任务相关命令使用
### 1. 单次执行相关命令
**(1) at**
语法:at [OPTION]… TIME

TIME的表现形式:
a. HH:MM [YYYY-mm-dd]
b. noon(12:00),midnight(24:00),teatime(16:00)
c. tomorrow
d. now+#UNIT,UNIT:minutes, hours, days, weeks

at命令的选项

选项 | 含义
—— | ——
-l | 查看作业队列,相当于atq命令
-f /PATH/FROM/SOMEFILE | 从指定文件中读取作业任务,而不用再交互式输入
-d | 删除指定的作业,相当于atrm命令
-c # | 查看第#个作业的具体内容
-q QUEUE | 指明队列

> 注意:
作业执行的结果是以邮件发送给提交作业的用户;
at命令可以执行shell脚本,可以直接指定脚本文件路径;
at命令有自己的运行环境,与交互式界面的运行环境不相同,有时执行命令需要指明命令的绝对路径,否则未必能够找到命令。

**(2) batch**
batch命令会让系统自行选择在系统资源比较空闲的时间去执行指定的任务

### 2. 周期执行相关命令
#### (1) cron
服务程序:
cronle:主程序包,提供了crond守护进程及相关辅助工具。

任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

**cron的服务管理**

命令 | 含义
—— | ——
/sbin/service crond start | 启动服务
/sbin/service crond stop | 关闭服务
/sbin/service crond restart | 重启服务
/sbin/service crond reload | 重新载入配置
你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start

**linux任务调度的工作主要分为以下两类**:
系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
> 对于系统cron任务,要修改的话,需要手动编辑/etc/crontab配置文件

个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

**系统cron的配置格式 –  /etc/crontab**

“`
~]# 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
“`
> 注意
1.每一行定义一个周期性任务,共7个字段:
\* * * * * : 定义周期性时间
user-name:运行任务的用户的身份
command 通杯executed:要运行的任务
2.此处的环境变量不同于用户登陆后获得的环境变量,因此建议命令使用绝对路径(或自定义环境变量)以避免出现问题。
3.执行结果邮件发送给MAILTO指定的用户

 

**用户cron的配置格式 – /var/spool/cron/USERNAME**
“`
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
“`
> 注意
1.每一行定义一个周期性任务,共6个字段:
\* * * * * : 定义周期性时间
command 通杯executed:要运行的任务
2.此处的环境变量不同于用户登陆后获得的环境变量,因此建议命令使用绝对路径(或自定义环境变量)以避免出现问题。
3.执行结果邮件发送给当前用户

**cron文件语法**
分     小时   日       月       星期     命令
0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

几个特殊符号的含义:

符号 | 含义
—— | ——
* | 代表取值范围内的数字,
/ | 代表”每”,
– | 代表从某个数字到某个数字,
, | 分开几个离散的数字

 

– **任务调度设置文件的写法**
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件

具体格式如下:
Minute Hour Day Month Dayofweek   command
分钟     小时   天     月       每星期的第几天       命令

每个字段代表的含义如下:

段 | 含义
— | ——
Minute |  每个小时的第几分钟执行该任务
Hour | 每天的第几个小时执行该任务
Day | 每月的第几天执行该任务
Month | 每年的第几个月执行该任务
DayOfWeek | 每周的第几天执行该任务
Command | 指定要执行的程序

在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
例如:
5       *       *           *     *     ls             指定每小时的第5分钟执行一次ls命令
30     5       *           *     *     ls             指定每天的 5:30 执行ls命令
30     7       8         *     *     ls             指定每月8号的7:30分执行ls命令
30     5       8         6     *     ls             指定每年的6月8日5:30执行ls命令
30     6       *           *     0     ls             指定每星期日的6:30执行ls命令 [注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30     3     10,20     *     *     ls     每月10号及20号的3:30执行ls命令 [注:“,”用来连接多个不连续的时段]
25     8-11 *           *     *     ls       每天8-11点的第25分钟执行ls命令 [注:“-”用来连接连续的时段]
*/15   *       *           *     *     ls         每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30   6     */10         *     *     ls       每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

– **新增调度任务**
新增调度任务可用两种方法:
1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
– **查看调度任务**
crontab -l //列出当前的所有调度任务
crontab -l -u jp   //列出用户jp的所有调度任务
– **删除任务调度工作**
crontab -r   //删除所有任务调度工作
– **任务调度执行结果的转向**
例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示执行结果及错误信息。
编辑/etc/crontab 文件配置cron
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01   *   *   *   *     root run-parts /etc/cron.hourly         //每小时执行/etc/cron.hourly内的脚本
02   4   *   *   *     root run-parts /etc/cron.daily           //每天执行/etc/cron.daily内的脚本
22   4   *   *   0     root run-parts /etc/cron.weekly       //每星期执行/etc/cron.weekly内的脚本
42   4   1   *   *     root run-parts /etc/cron.monthly     //每月去执行/etc/cron.monthly内的脚本
大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了
例如:         1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务
11 2 21 10 * rm -rf /mnt/fb

**crontab命令的常用参数**

参数 | 含义
—— | ——
-u | 设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
-l | 列出某个用户cron服务的详细内容
-r | 删除没个用户的cron服务
-i | 与-r一同使用,可以在删除前提醒用户确认是否删除
-e | 编辑某个用户的cron服务
示例:
root查看自己的cron设置
`crontab -u root -l`
root想删除fred的cron设置
`crontab -u fred -r`
> 注意
运行结果以邮件的形式通知当前用户,如果不想收到邮件:
(1) 正确信息不发邮件: COMMAND > /dev/null
(2) 正确错误都不发邮件:COMMAND &> /dev/null
另外,
定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可。

思考:某任务在指定的时间点因关机未能执行,下一次开机会不会自动执行?
答:不会执行,只能等待下一个周期的出发时间点再执行。
如果期望某时间因故未能按时执行,下一次开机后,无论是否到错过运行时间点都要执行一次,可使用anacron实现。

## 五、练习题
1. 每12小时备份一次/etc/目录至/backups目录中,保存文件名称格式为“etc-yyyy-mm-dd-hh.tar.xz”
“`
~]# vim etc_backup.sh
#!/bin/bash
#
[ ls /backups &> /dev/null ] || mkdir /backups &> /dev/null
tar -Jcf /backups/etc-$(date +%F-%H-%m-%d).tar.xz /etc/* &> /dev/null

crontab -e
0 0,12 * * * /root/etc_backup.sh
“`

2. 每周2、4、7备份/var/log/secure文件至/logs目录中,文件格式为“secure-yyyymmdd”
“`
~]# crontab -e
0 0 * * 2.4.7 cp /var/log/secure /logs/secure-$(date +%Y%m%d)
“`
3. 每2小时取出当前系统/proc/meminfo文件中以S或M开头的行信息,追加至/tmp/meminfo.txt文件中
“`
~]# crontab -e
0 */2 * * * grep “^[SM].*” /proc/meminfo > /tmp/meminfo.txt

“`

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88074

(0)
N27_sapbcsN27_sapbcs
上一篇 2017-10-27 09:37
下一篇 2017-10-27 09:42

相关推荐

  • N26第二周博客作业

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 Ø  ls 查看文件与目录 ls [选项] 文件或目录 常用选项 -a:全部的文件,连同隐藏文件(以.开头)一起列出来 -d:列出目录本身,而不是列出目录里的文件 -l:列出详细信息,如文件的属性与权限等数据 -h:将文件容量以易读的方式显示(例如:GB,KB等) -t:…

    Linux干货 2017-01-08
  • N23-第五周博客作业

    1、显示当前系统上root、fedora或user1用户的默认shell。 [root@localhost ~]# cat /etc/passwd | egrep "^root\>" | cut -d: -f1,7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hell…

    Linux干货 2016-12-05
  • 磁盘管理,软raid,脚本基础

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; mke2fs -t ext4 -L MYDATA -m 2 /dev/sdb tune2fs -o acl /dev/sdb (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行…

    Linux干货 2017-10-25
  • 文本处理三剑客之 Sed

         Sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自…

    2017-08-26
  • class14磁盘管理(一)

    一、硬盘基础知识及分区类型 1、磁盘结构 设备文件 I/O Ports: I/O 设备地址 一切皆文件:   open(), read(), write(), close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位“字符”,键…

    Linux干货 2016-08-29
  • 如何删除一个目录下的所有文件,但保留一个指定文件。附一些常用命令

    解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10   十个文件 方法如下: find /date -type f ! -name “file10″|xargs rm -f 另外还有其他的方法比如:rsync命令和bush的 extglob功能等。在此不一一列举。 附常用命令: 文件和目…

    2017-07-15