资讯专栏INFORMATION COLUMN

计划任务

fengxiuping / 2594人阅读

摘要:博文参考计划任务未来的某时间点执行一次任务系统自行选择空闲时间去执行此处指定的任务周期性运行某任务命令用于在指定时间执行命令。用户可以使用工具来定制自己的计划任务。系统任务运行计算机关机时不运行的任务,以后版本取消服务,由服务管理。

博文参考
http://www.178linux.com/48784
http://www.178linux.com/48902
http://www.myhack58.com/Article/48/66/2017/85923.htm
计划任务

at:未来的某时间点执行一次任务
batch:系统自行选择空闲时间去执行此处指定的任务
cron:周期性运行某任务

at
at命令用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

标准使用格式:
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…]
batch
at -b

简化格式:

at [option] TIME

常用选项:

-V:在标准错误上输出版本号。
-q queue:使用指定的队列。一个队列用一个字母标定,有效的的队列标定的 范围是从a到z和从A到Z。at 的缺省队列是 a,batch 的缺省队列是 b。队列的字母顺序越高,则队列运行时越谦让(运行级别越低)。 指定的队列 "="保留给当前运行的作业所在的队列。 如果一个作业被提交到一个以大写字母标定的队列,则与提交到 batch 同样对待。如果给 atq 指定一个队列,则只显示在此指定 队列中的作业。
-m:当作业完成时即使没有输出也给用户发邮件。
-f /path/from/somefile:从指定的文件中读取任务
-l:显示待执行任务的列表;等同于atq。
-d:删除指定的待执行任务;等同于atrm。
-v:对于 atq, 显示完整的在队列中未被删除的作业,对于其他 命令,显示作业将要执行的时间。 显示的时间的格式类似于"1997-02-20 14:50",但如果设置了 POSIXLY_CORRECT 环境变量之后,格式类似于"Thu Feb 20 14:50:00 1996"。
-c:查看具体作业任务

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户,并不会显示输出并且依赖于atd服务,需要启动才能实现at任务

at 时间格式
TIME:定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd]
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD
noon(中午), midnight(深夜), teatime(4pm)
today(今天)、tomorrow(明天)
now+#{minutes,hours,days, OR weeks}
例如:
HH:MM 02:00
在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD 04:00 2016-09-20
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某个时间点再加几个时间后才进行该项任务
now + 5 minutes
04pm + 3 days

1、三天后的下午5点执行/bin/ls

2、明天17点钟,输出时间到指定文件内

3、计划任务设定后,在没有执行之前我们可以用atq命令(等同at -l)来查看系统没有执行的工作任务

4、删除已经设置的任务 #atrm 4等同于at -d

5、显示已经设置的任务内容

at命令执行方式

交互式

输入重定向式

at 16:00

at -f 文件

at 16:00 -f /root/a.sh

相关目录和文件
/var/spool/at
/etc/at.allow
/etc/at.deny
/var/spool/at/spool
/proc/loadavg
/var/run/utmp
at任务队列存放在/var/spool/at目录中
/etc/at.{allow,deny}控制用户是否能执行at任务
白名单: /etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
黑名单: /etc/at.deny 拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
如果两个文件都不存在,只有 root 可以执行 at 命令
注意:/etc/at.{allow,deny}同时存在时白名单的优先级要高于黑名单;名单格式即为用户名例如:tom(注意:一行一个用户名)
周期性计划任务cron
相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron: cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
确保crond守护处于运行状态:

区别

CentOS 7:
systemctl status crond
CentOS 6:
service crond status

crond服务

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

查看crontab服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

计划周期性执行的任务提交给crond,到指定时间会自动运行系统cron任务:系统维护作业
/etc/crontab
crontab命令
日志: /var/log/cron

计划任务

系统cron任务:/etc/crontab
注释行以 # 开头
详情参见 man 5 crontab

任务调度
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
系统任务

前四行是用来配置crond任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash;
第二行PATH变量指定了系统执行命令的路径;
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
/etc/cron.deny 该文件中所列用户不允许使用crontab命令;
/etc/cron.allow 该文件中所列用户允许使用crontab命令;
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名;
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段

格式含义

minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
user-name:以指定的用户身份运行任务
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

(1)特定值:表示指定时间点有效取值范围内的值
(2)星号():代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
(3)逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
(4)中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
(5)正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如/10,如果用在minute字段,表示每十分钟执行一次。

例如:

每3小时echo命令;
0 /3 centos /bin/echo "howdy!"
晚上9点10分运行echo命令;
10 21 * root /bin/echo "Howdy!"

时间格式

@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 每小时

计划任务

系统的计划任务:
/etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 脚本
/etc/cron.daily/ 脚本
/etc/cron.weekly/ 脚本
/etc/cron.monthly/脚本
crontab

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。每一个用户拥有自己的crontab,配置文件存在/var下面,不能被直接编辑。
标准使用格式:
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
crontab -n [ hostname ]
crontab -c
简化格式:
crontab(选项)(参数)
选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。

参数
crontab文件:指定包含待执行任务的crontab文件。

知识扩展

Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

anacron

anacron系统任务运行计算机关机时cron不运行的任务, CentOS6以后版本取消anacron服务,由crond服务管理。
假设计算机没有一直开机,对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要,对偶尔要关机的服务器很有用
配置文件:
/etc/anacrontab,负责执行/etc/ cron.daily、/etc/cron.weekly、/etc/cron.monthly中系统任务。
/etc/cron.hourly/由/cron.d/0hourly执行
字段1:如果在这些日子里没有运行这些任务……
字段2:在重新引导后等待这么多分钟后运行它
字段3:任务识别器,在日志文件中标识
字段4:要执行的任务
当执行任务时,更新/var/spool/anacron/中文件的时间戳

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7使用systemd-tmpfiles-setup服务实现
配置文件:

/etc/tmpfiles.d/.conf
/run/tmpfiles.d/.conf
/usr/lib/tmpfiles/*.conf
/usr/lib/tmpfiles.d/tmp.conf

d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d
命令:

systemd-tmpfiles –clean|remove|create configfile
用户任务

用户cron

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

使用

crontab -e #按/etc/crontab格式手动添加计划内容
查看计划任务
crontab -l
并且
crontab -e 产生的文件会生成并保存在/var/spool/cron/USERNAME中
crontab -r 删除计划任务

注意:计划任务的文件名必须和用户名相同才可以执行。

at和crontab
一次性作业使用 at
重复性作业使用crontab
Create —– at time crontab -e
List —– at -l crontab -l
Details —– at -c jobnum N/A
Remove —– at -d jobnum crontab -r
Edit N/A —– crontab -e
没有被重定向的输出会被邮寄给用户
根用户能够修改其它用户的作业
任务警告
注意:运行结果的标准输出和错误以邮件通知给相关用户
(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

暂停指定的秒数。时间单位可以是s 表示秒(默认设置),m 表示分钟,h 表示小时,d 表示天。 指定数字可以是一个整数,也可以是浮点数。
注意:如果参数个数超过2个,暂停的总时间为各个参数的值的和。
sleep NUMBER[SUFFIX]…
SUFFIX:
s: 秒, 默认
m: 分
h: 小时
d: 天
sleep后面的参数可以浮点数
例如:sleep 0.5

有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的,下面是一个Shell进度条的脚本演示在脚本中生成延时。(打印进度条)

usleep命令是sleep命令单位为微妙的运用
例如:usleep 1000000

1、每天的2点和12点整,将/etc备份至/testdir/backup目录中,保存的文件名称格式为“ etcbak-yyyy-mm-ddHH.tar.xz”
将下列代码添加至/etc/crontab中

2、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“ messages-yyyymmdd”
将下列代码添加至/etc/crontab中

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

0 /2 cat /proc/meminfo | grep "^[SM]" >> /tmp/meminfo.txt

4、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报
将下列代码添加至/etc/crontab中
/10 1-5 . /root/bin/CiPanJinKong.sh

5、工作日时间内,对用户docker每小执行一次“ip addr show”命令;
切换至docker用户使用命令crontab -e进入编辑界面
加入"0 9-18 1-5 docker ip addr show"信息后保存退出

6、每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”;
在/etc/crontab文件中添加如下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38695.html

相关文章

  • 测试如何在敏捷团队中工作?

    摘要:测试的工作量更加分散,不会出现一段时间无事可做,一段时间忙的要死的情况。如果测试一味地只管提交,而不考虑开发的工作习惯和目标的可执行性,就会导致效率大大降低。这种看似投机取巧的方法会让测试的用例编写工作事半功倍,效率大大提升。 临近年末,各家公司都进入了紧张的年前项目冲刺阶段,我们也不例外。每天开完早会,就听大家在抱怨任务太多做不完、一个月都没正常过周末了云云。 据开发部门的同事说,他...

    taowen 评论0 收藏0
  • 【用故事解读 MobX源码(一)】 autorun

    摘要:随后,执行官给出一张当张三存款发生变化之时,此机构的运作时序图的确,小机构靠人力运作,大机构才靠制度运转。第一条语句创建观察员第一条语句张三我们调用的时候,就创建了对象,对象的所有属性都将被拷贝至一个克隆对象并将克隆对象转变成可观察的。 ================前言=================== 初衷:网上已有很多关于 MobX 源码解读的文章,但大多阅读成本甚高。...

    qieangel2013 评论0 收藏0
  • 使用 Laravel 制定 MySQL 数据库备份计划任务

    摘要:现在让我们将这个命令通过使用命令进行封装,使其更易于运行和可加入计划任务。编写备份任务的计划任务首先,在中能够轻松创建计划任务。 译文首发于 使用 Laravel 制定 MySQL 数据库备份计划任务,转载请注明出处。 你可以在终端里通过运行一行命令导出整个数据库。这种方案不仅简单直接而且有效。不过有更加自动化的解决方案。让我们来看看究竟是什么! showImg(https://seg...

    wangshijun 评论0 收藏0

发表评论

0条评论

fengxiuping

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<