17.计划任务

一、 单次任务

//www.greatytc.com/p/066f6aa07898

atd 服务负责管理单次任务

进行单次任务的程序是 at 命令, 管理他的服务是 atd

systemctl restart atd 
systemctl enable atd
systemctl status atd

工作方式

我们使用 at 这个指令来产生所要运行的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了

实际上有两个权限控制文件,规定了哪些用户可以使用,哪些用户不可以使用

规则是这样的:
一行一个用户

  1. 首先查看 /etc/at.allow 文件。
    假如系统中存在此文件,就只允许在此文件的用户使用 at, 其他都拒绝。

  2. 假如没有 /etc/at.allow 文件,就看有没有 /etc/at.deny 文件。
    这个文件意义就是,允许所有,拒绝部分。
    就是在这个文件中的用户是被拒绝的,不在此文件中的用户是被允许的。

  3. 默认CentOS7系统是有一个空的 /etc/at.deny 文件。
    意思是允许所有人使用 at 命令的意思。

具体操作

[root@study ~]# at [-mldv] TIME
[root@study ~]# at -c 工作号码
选项与参数:
-m  :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
-l  :at -l 相当于 `atq` 命令,列出目前系统上面的所有该使用者的 at 调度;
-d  :at -d 相当于 `atrm` 命令 ,可以取消一个在 `at` 调度中的工作;
-v  :可以使用较明显的时间格式列出 at 调度中的工作列表;
-c  :可以列出后面接的该项工作的实际指令内容。

TIME:

时间格式,可以定义出『什么时候要进行 at 這项工作』的时间.

格式有:

HH:MM 如: 04:00
在今日的 HH:MM 进行,若时间已过,则在明天的 HH:MM 进行行此工作。

HH:MM YYYY-MM-DD 如: 04:00 2019-07-28
強制在某年某月的某一天的特殊時刻進行該工作!

HH:MM[am|pm] + number [minutes|hours|days|weeks]
如:
now + 5 minutes

04pm + 3 days
就是說,在某個时间点『再加上几个时间后』才进行。

示例:

创建

[root@kvm-docker ~]# at now + 5 minutes
at> echo "hello" > /dev/pts/0
at> <EOT>
job 1 at Sat Jul 27 18:49:00 2019

按下 Ctrl+d 键退出编辑

查询

[root@kvm-docker ~]# atq
1   Sat Jul 27 18:49:00 2019 a root

二、周期性的任务

就是 计划任务

循环执行的例行性工作调度则是由 cron (crond) 这个系统服务来控制的。

默认情况下,每个用户都可以通过 crontab 管理自己的计划任务。

at 一样,有两个文件控制权限。

  • /etc/cron.allow
  • /etc/cron.deny

使用规则是和之前的 at 的文件一样。
/etc/cron.allow/etc/cron.deny 要优先, 请永远用一个文件进行控制,别给自己找麻烦!

crontab -e 设置格式

命令格式的前一部分是对时间的设定
后面一部分是要执行的命令。

关于时间

参考: cat /etc/crontab

代表意义 分钟 小时 日期 月份 指令
数字范围 0-59 0-23 1-31 1-12 0-7 命令

周的数字为 07 时,都代表“星期天”的意思!
总结记忆:
分 时 日 月 星

除了数字还有几个特殊的符号:

就是 */-,

  • *代表所有的取值范围内的数字
  • / 代表每的意思,*/5 表示每5个单位
  • - 代表从某个数字到某个数字
  • , 代表分隔时段的意思,就是 的意思

以下举几个例子说明:

每天早上6点:
0 6 * * * command

每两个小时:
0 */2 * * * command

23 点到早上7点之间每两个小时, 并且还有早上8点:

0 23-7/2,8 * * * command

每个月的 4 号的早上11点和每周的周一到周三的早上11点:
0 11 4 * 1-3 command

1月1日早上2点 30 分:
30 2 1 1 * command

管理当前用户的计划任务

创建/再次编辑

这会调用 `vi` 打开一个临时文件
➜  ~ crontab -e
*/1 * * * *  /bin/echo "ok shark"

编辑好后,想使用 vi 一样保存退出。
保存后,这个信息会被保存在 /var/spool/cron/ 目录下的和用户同名的文件中。
比如目前操作的用户是 sharkshark 的计划任务会别保存在 /var/spool/cron/shark 文件中。
这个文件每个用户只有一个。

查看

➜  ~ crontab -l
*/1 * * * * /bin/echo "ok shark"
➜  ~ cat /var/spool/cron/root
*/1 * * * * /bin/echo "ok shark"

修改/删除一个

再次使用 crontab -e 命令利用 vi 进行修改和删除单个计划任务。

删除全部

crontable  -r

cron 的系统级别的配置文件

/etc/crontab/etc/cron.d/*

/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

MAILTO=root
就是执行这个计划任务的命令出错时,或者是该计划任务的执行结果有 STDOUT/STDERR 时,将这些信息发送给 root 用户。
一般改成自己的账户 MAILTO=shark@my.host.name

user-name
执行后面命令的 身份账户
/etc/crontab 里面当然要指定身份

/etc/cron.d/*

在此目录下的所有文件都会被 crond 服务识别为一个计划任务的列表文件。

➜  ~ ls /etc/cron.d/
0hourly
这个文件,crond 会从 1 到 5 分钟,随机挑选一个时间执行这个文件中的计划任务。

➜  ~ cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bashin/
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

run-parts 脚本会在大约 5 分钟内随机选一个时间来执行 /etc/cron.hourly 目录内的所有可执行文件
也就是说这里的计划任务是:
以 root 用户的身份,每个小时的第 1 分钟执行 /etc/cron.hourly 目录下的所有脚本。
/etc/cron.hourly 目录下必须是可执行文件。

最佳实战

  1. 不要在统一时间段执行多个计划任务

  2. 将命令的错误输出重定向

*/1   *   *   *   *   /bin/echo  "hello"      2> /dev/null

  1. 周与日月不可同时并存

anacron

作用

anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的执行! 以及因为某些原因导致的超过时间而没有被执行的调度工作。

其实 anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的调度任务有没有被执行,如果有超过期限的工作在, 就执行该调度任务,执行完毕或无须执行任何调度时,anacron 就停止了。

crond 与 anacron 的关系:

  1. crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据“分、时、日、月、周”的时间设置去各项工作调度;

  2. 根据 /etc/cron.d/0hourly 的设置,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的可执行文件;
    因为 /etc/cron.hourly/0anacron 这个指令档的缘故,主动的每小时执行 anacron ,并调用 /etc/anacrontab 的配置文件;

  3. 根据 /etc/anacrontab 的设置,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 内的可执行文件,以进行固定周期需要执行的指令。

也就是说,如果你每个周日的需要执行的动作是放置于 /etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓回来重新执行。但如果是放置在 /etc/cron.weekly/ 目录下,那么该工作就会定期,几乎一定会在一周内执行一次~如果你关机超过一周,那么一开机后的数个小时内,该工作就会主动的被执行喔! 真的吗?对啦!因为 /etc/anacrontab 的定义啦!

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

推荐阅读更多精彩内容