进程和计划任务详解(二)

概述:

什么是任务计划呢?就像我们每个人日常生活中都会使用到的闹钟一样,按时的去提醒该去做什么事情,以免忘记。同样,我们在工作当中也要在每天在特定的时间内安排做一些事情,这就是任务计划,本章将学习如何制定Linux系统的任务计划,这里主要包括两种工具:at 和 crontab。

任务计划介绍
任务计划的分类
一次性的任务计划:只执行一次就结束;
周期性的任务计划:每个一定的时间去做相同的事情;
任务计划使用的命令:
未来时间点执行一次任务:at,batch
周期性运行某任务:crontab
执行结果会通过邮件发送给用户
确定邮件服务器是否开启,执行 netstat -tnlp 或者 ss -tnlp 命令,查看25号端口
邮件服务
本地电子邮件服务:
smtp协议:simple mail transmission protocol 简单邮件传输协议;
pop3:Post Office Procotol 邮局协议;
imap4:Internet Mail Access Procotol 互联网邮件访问协议;
本地主机收发邮件:
MUA:Mail User Agent,用户收发邮件的工具程序;
☉mail 命令
语法:mail [-s 'SUBJECT'] username[@hostname]
邮件正文的生成
1)交互式输入:“.”号单独成行可以代表正文结束;Ctrl+d 提交亦可;
mail -s 'Hello root' root
2)通过输入重定向:
mail -s 'fstab file' root < /etc/fstab
3)通过管道
cat /etc/issue |mail -s 'issue file' root
1.发送邮件,输入标题,指明发送用户
2.切换到centos用户查收邮件

at 命令和 batch命令

at命令(未来时间点执行一次任务)
1)交互式 2)输入重定向 3) at –f 文件
 依赖与atd服务,需要启动才能实现at任务
 at队列存放在/var/spool/at目录中
CentOS 6:service atd {status|start};
CentOS 7:systemctl {status|start} atd
☉语法:
at [option] TIME
TIME:定义出什么时候执行这项任务
HH:MM [YYYY-mm-dd];
04:00 2016-09-20
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date];
  04pm March 17
  17:20 tomorrow
noon, midnight(午夜), teatime(下午4点),tomorrow
now+#{minutes,hours,days, OR weeks}
HH:MM[am|pm] + number [minutes|hours|days|weeks]
 在某个时间点再加几个时间后才进行该项任务
 如:now + 5 minutes
     04pm + 3 days
at 的作业有队列,存放在/var/spool/at 中,用单个字母来表示,默认都使用 a 队列;
☉选项:
-q QUEUE:指明队列;
-l:列出指定队列中等待运行的作业;相当于atq;
-d #:删除指定作业号的作业;相当于atrm;
-c #:查看指定作业号的具体作业任务;
-v:可以使用较明显的时间格式列出at中的工作列表;
-f /path/from/somefile:从指定的文件中读取任务,不再交互式输入;(# at -f /testdir/at.txt)
-m:强制at发送邮件,表示执行完毕
注意:
作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

[root@centos7 ~]# at now+2min   # 设定计划任务,在2分钟后执行
at> cat /etc/issue
at> ls /var
at> echo "hello there."
at> <EOT>               # 按 Ctrl+d 提交
job 1 at Fri Feb 24 15:49:00 2017

[root@centos7 ~]# at -l     # 查看计划任务
1   Fri Feb 24 15:49:00 2017 a root
 
[root@centos7 ~]# at -f at.tasks now+5min   #从指定文件中读取任务,不在交互式输入
job 2 at Fri Feb 24 16:08:00 2017

[root@centos7 ~]# at -l
2   Fri Feb 24 16:08:00 2017 a root
[root@centos7 ~]# atq
2   Fri Feb 24 16:08:00 2017 a root
 
[root@centos7 ~]# at -d 2   指明任务编号,删除任务 相当于atrm
[root@centos7 ~]# atq
 
[root@centos7 ~]# at -f at.tasks now+5min
job 3 at Fri Feb 24 16:09:00 2017
[root@centos7 ~]# atq
3   Fri Feb 24 16:09:00 2017 a root
[root@centos7 ~]# atrm 3
[root@centos7 ~]# atq
普通用户也可以执行at
/etc/at.{allow,deny} 控制用户是否能执行at任务
#白名单:
/etc/at.allow :默认不存在,只有该文件中的用户才能执行at命令;
#黑名单:
/etc/at.deny :拒绝该文件中的用户执行at命令,而没有在at.deny 文件中的用户则可以正常执行at命令。
注意:
白名单的优先级是大于黑名单的,如果一旦创建,则只有白名单中的用户才可以执行at命令,其他即使不在白
名单中的用户统统没有权限执行at命令;如果没有白名单,则只有黑名单起作用,此时,在黑名单中的用户是
不能执行at命令的,不在黑名单中的用户统统默认是允许执行at命令的;
如果两个文件都不存在,只有root 可以执行at 命令
batch命令
让系统自行选择空闲时间去执行此处指定的任务;

周期性计划任务:cron

1.cron介绍

服务程序相关的程序包
cronie:主程序包,提供crond守护进程及相关辅助工具;
cronie-anacron:cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该
运行的时间点未能正常运行,则anacron会随后启动一次此任务;
crontabs:包含CentOS提供系统维护任务
确保crond守护进程(daemon)处于运行状态:
CentOS 7:systemctl status crond
CentOS 6:service crond status
使用命令
向crond提交作业的方式不同于at,他需要使用专用的配置文件,此文件有固定格式,不建议使用文本编
辑器直接编辑此文件,要使用crontab命令,可以检查语法是否有错误。
cron任务分为两类:
系统cron任务:
主要用于实现系统自身的维护;
手动编辑:/etc/crontab文件
用户cron任务:
命令 crontab
用cron执行的计划任务默认存放在:
日志:/var/log/cron

2.系统cron配置格式

系统cron的配置格式:/etc/crontab

注意:
1.每一行定义一个周期性任务;共7个字段
* * * * *:定义周期性时间;
user-name:运行任务的用户身份;
command to be executed:要执性的任务 
2.此处的环境变量不同用户登录后获得的环境变量,因此,建议命令使用绝对路径,或者自定义的PATH
环境变量;
3.执性结果邮件发送给 MAILTO 指定的用户

3.用户cron配置格式

用户cron配置格式:
配置文件:/var/spool/cron/USERNAME
使用命令:crontab -e
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

4.时间表示法

五个时间点分别是:分钟 小时 天 月 周几
特定值
给定时间点有效取值范围内的值; 
注意:
day of week (周几)和 day of month (日)一般不同时使用;
 *
给定时间点上有效取值范围内的所有值;表示“每..”(找时间点最小的 *)
示例:
* * * * *   默认每天每分钟执行
3 * * * *:每小时执行一次,每小时的第三分钟;
3 4 * * 5:每周执行一次,每周五的4点3分;
5 6 7 * *:每月执性一次,每月的7号6点5分;
7 8 9 10 *:每年执行一次,每年的10月9号8点7分;
离散取值:","
在时间点上使用逗号分割的多个值:#,#,#
示例:
9 8 * * 3,7:每周三和周日的8点9分;
0 8,20 * * 3,7:每周三和周日的8点和20点
连续取值:"-"
在时间点导航使用-连接开头和结束:#-#
示例:
0 9-18 * * 1-5:周一到周五(工作时间)内的每小时执行;
在指定时间点上,定义步长:
*/#:#即步长
注意:
指定的时间点不能被步长整除时,其意义将不复存在;
最小时间单位为“分钟”,想完成“秒”级任务,的需要额外借助其它机制;(即:定义成每分钟任务,而再
利用
脚本实现每分钟之内,循环执行多次;)
示例:
*/5 * * * *:每5分钟执行一次任务;
*/7:不能被整除,没有意义

预定义的时间格式

@reboot     Run once after reboot.
@yearly      ---->  0 0 1 1 * 每年;
@annually  ---->  0 0 1 1 * 每年;
@monthly  ---->  0 0 1 * *  每月;
@weekly    ---->  0 0 * * 0  每周;
@daily        ---->  0 0 * * *  每天;
@hourly     ---->  0 * * * *  每小时

4.crontab 命令

crontab命令:
语法:
crontab [-u user] [-l | -r | -e] [-i]
选项:
-e:打开编辑界面定义任务;
-l:列出所有任务(仅是当前用户的所有任务);
-r:移除所有任务,即删除/var/spool/cron/USERNAME文件;
      如果,删除单个任务应该通过编辑界面删除行实现;
-i:在使用-r选项移除所有任务时提示用户确认;
-u user:root用户可为指定用户管理cron任务(即为某个用户编辑计划任务);
注意:
运行结果以邮件通知给当前用户;如果拒接接收邮件:
COMMAND > /dev/null (执行成功发送给 /dev/null )
COMMAND &> /dev/null(不管执行成功和错误都直接发送给 /dev/null,慎用!!!)
定义COMMAND时,如果命令需要用到%,需要对其转义,但放置于单引号中的%不用转义亦可;
如:touch $(date +%Y-%m-%d-%H-%M-%S)
思考:
某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
不会执行! 如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使
用 ancorn 命令;
如何在秒级别运行任务?
* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done
# 定义周期性计划任务,直接使用 crontab -e 命令,会直接调用 vim 编辑器,并且会检查语法错误
例:
[root@centos7 ~]# crontab -e
crontab: installing new crontab
 
# 查看定义的计划任务
[root@centos7 ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate cn.ntp.org.cn > /dev/null
 
[root@centos7 ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate cn.ntp.org.cn > /dev/null
 
# 删除所有任务计划,如果只删除单个
[root@centos7 ~]# crontab -r
[root@centos7 ~]# crontab -l
no crontab for root
# 为 centos 用户创建计划任务,只有 root 有权限
例:
[root@centos7 ~]# crontab -u centos -e
no crontab for centos - using an empty one
crontab: installing new crontab
 
[root@centos7 ~]# ls /var/spool/cron/
centos  root
 
[root@centos7 ~]# cat /var/spool/cron/centos 
*/2 * * * * /bin/echo "hello everybody!"
 
# 查看当前用户的
[root@centos7 ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate cn.ntp.org.cn > /dev/null
 
# 查看centos用户的
[root@centos7 ~]# crontab -u centos -l
*/2 * * * * /bin/echo "hello everybody!"
 
[root@centos7 ~]# crontab -u centos -ri
crontab: really delete centos's crontab? y
[root@centos7 ~]# crontab -u centos -l
no crontab for centos

5.sleep 命令

sleep
用途
sleep命令常用于在Linux shell脚本中延迟时间。
语法:
sleep NUMBER [SUFFIX]...
☉SUFFIX(后缀):
s:秒, 默认;
m:分;
h:小时;
d:天
例:
[root@centos7 ~]# date;sleep 5;date
2017年 02月 25日 星期六 11:24:09 CST
2017年 02月 25日 星期六 11:24:14 CST
 
[root@centos7 ~]# date;sleep 1.5m;date
2017年 02月 25日 星期六 11:25:13 CST
2017年 02月 25日 星期六 11:26:43 CST
1、每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“etc-
yyyy-mm-dd-HH”

# mkdir /backup
# crontab -e
 0 */4 * * * /bin/cp -a /etc /backup/etc-`date + '%F-%H'` > /dev/null

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

# mkdir /logs
# crontab -e
# 20 1 * * 2,4,0 /bin/cp -a /var/log/messages /logs/messages-`date +'%Y%m%d'` > /dev/null

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

# crontab -e
# 20 */2 * * * /bin/grep -e '^S' -e '^M' /proc/meminfo >> /tmp/meminfo.txt

4、工作日时间内,每两小时执行一次“ip addr show”命令

# crontab -e
# 0 9-17/2 * * 1-5 /sbin/ip addr show
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 进程相关概念系统进程管理工具任务计划 一、进程相关概念 定义:进程(Process)是运行中的程序的一个副本,是被...
    哈喽别样阅读 554评论 0 0
  • Linux定时任务Crontab命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的。...
    孙燕超阅读 1,815评论 0 4
  • Linux 系统提供了使用者控制计划任务的命令 :crontab 命令。 一、crond简介 crond是linu...
    happeace阅读 1,767评论 0 53
  • 简书不维护了,欢迎关注我的知乎:波罗学的个人主页 原文地址 此篇技术博文主要介绍的是crontab,Linux下的...
    波罗学的草稿阅读 5,977评论 0 13
  • 进程相关概念 内核的功能 进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等。 process 进程,正...
    夹克K阅读 992评论 0 1