ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux计划任务

2019-11-26 23:55:21  阅读:272  来源: 互联网

标签:anacron crontab 调度 cron etc 任务 计划 linux 执行


本章架构:
1.什么是例行性工作调度
2.仅执行一次的工作调度
3.循环执行的例行性工作调度
4.可唤醒停机期间的工作任务

一、什么是例行性工作调度

两种工作调度的方式:

  • 一种是例行性的,就是每隔一定的周期要来办的事项
  • 一种是突发性的,就是这次做完以后就没有的哪一种

1.在Linux下面如何达到这两个功能呢

1.at :at 是个可以处理仅执行一次就结束调度的指令,不过要执行 at 时, 必须要有 atd 这个服务 的支持才行。在 某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 默认是启动的! 

2.crontab :crontab 这个指令所设置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。 crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务喔!

2.Linux系统常见的例行性任务

linux计划任务

二、执行一次的工作调度

1.调度服务at指令

at 的工作情况:
* 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中); 
* 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯; 
* 如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。

2.at选项与参数

首先来看如何设置一次性任务,命令格式为:at [HH:MM] [yyyy-mm-dd];

查看一次性任务计划的命令为:“ atq ”

删除一次性任务计划的命令格式为:“ atrm [任务编号]”
linux计划任务

范例:再过五分钟后,将 /root/ .bashrc寄给 root 自己

linux计划任务

三、循环执行的例行性工作调度

1.crontab 使用的限制数据有:

* /etc/cron.allow: 将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
* /etc/cron.deny: 将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。
* 以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个 来限制而已,因此,建议你只要保留一个即可, 免得影响自己在设置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你 可以将不想让他执行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!

2.crontab选项与参数:

linux计划任务
 
其中 -u user为
编辑某个用户的cron,只用root可以使用此参数为别的用户设置cron服务。也可用于给用户指定crontab文件

范例
实例1:列出当前用户的定时任务

[22:30:17][dodmaster@mha3 ~]$ crontab -l
0 1 * * 1 $HOME/.DailyShell/hislogclear.sh 
0 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/voice
20 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/data/
40 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/sms/

实例2:root用户编辑用户martin的定时任务


[22:30:17][root@mha3 ~]# crontab -u martin -e

实例3:为用户martin指定定时任务文件

[22:30:17][root@mha3 ~]# crontab -u martin martincron

以下内容说明了系统定时任务的具体书写格式:
linux计划任务
linux计划任务

实例1:每周末的凌晨一点钟执行一次系统的raid-check

0 1 * * Sun root /usr/sbin/raid-check

实例2:每天的4:02am分root用户执行/etc/cron.daily目录下的所有脚本,run-parts参数表示执行后面目录中的所有脚本。

02 4 * * * root run-parts /etc/cron.daily

实例3:每天的8-18每四小时,dodmaster用户执行hislogclear.sh脚本,即8:44,12:44,16:44,20:44四个时间点,会执行该脚本。

[21:57:56][dodmaster@mha3 ~]$ crontab -l
44 8-20/4 * * * $HOME/.DailyShell/hislogclear.sh 

实例4:每五分钟执行一次

*/5 * * * * echo "every five minute to do it" >> time.txt

  

实例5:每个工作日下午八点执行

0 20 * * 1-5 echo "every workday 20:00 to do it" >> time.txt

四、可唤醒停机期间的工作任务

想像一个环境,你的 Linux 服务器有一个工作是需要在每周的星期天凌晨 2 点进行,但是很不巧的,星期六停电了~所以 你得要星期一才能进公司去启动服务器。 那么请问,这个星期天的工作调度还要不要进行?
因为你开机的时候已经是星期一,所以 星期天的工作当然不会被进行,对吧!
问题是,若是该工作非常重要 (例如例行备份), 所以其实你还是希望在下个星期天之前的某天还是进行一下比较好~ 那你该怎办?自己手动执行?
这时候就 得要靠 anacron 这个指令的功能了!这家伙可以主动帮你进行时间到了但却没有执行的调度喔!

1.什么是 anacron

  • anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非 24 小时一直启动的 Linux 系 统的 crontab 的执行! 以及因为某些原因导致的超过时间而没有被执行的调度工作。
  • 其实 anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的调度任务有没有被执行,如果有超过期限的 工作在, 就执行该调度任务,执行完毕或无须执行任何调度时,anacron 就停止了。

anacron参数选项:
linux计划任务

linux计划任务

linux计划任务

2.anacron 的执行流程 (以 cron.daily 为例):

  • 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
  • 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳记;
  • 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;
  • 若准备进行指令,根据 /etc/anacrontab 的设置,将延迟 5 分钟 + 3 小时 (看 START_HOURS_RANGE 的设置);
  • 延迟时间过后,开始执行后续指令,亦即“ run-parts /etc/cron.daily ”这串指令;
  • 执行完毕后, anacron 程序结束。

3.crond 与 anacron 的关系:

  • crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据“分、时、日、月、周”的时间设置去各项工作调度;
  • 根据 /etc/cron.d/0hourly 的设置,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的可执行文件;
  • 因为 /etc/cron.hourly/0anacron 这个指令档的缘故,主动的每小时执行 anacron ,并调用 /etc/anacrontab 的配置文件;
  • 根据 /etc/anacrontab 的设置,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 内的可执行文 件,以进行固定周期需要执行的指令。

也就是说,如果你每个周日的需要执行的动作是放置于 /etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓 回来重新执行。但如果是放置在 /etc/cron.weekly/ 目录下,那么该工作就会定期,几乎一定会在一周内执行一次~如果你关机超过一 周,那么一开机后的数个小时内,该工作就会主动的被执行喔! 真的吗?因为 /etc/anacrontab 的定义啦!
注:基本上,crontab 与 at 都是“定时”去执行,过了时间就过了!不会重新来一遍~
那 anacron 则是“定期”去执行,某一段周期的执行 ~ 因此,两者可以并行,并不会互相冲突啦!

———————— 本文至此结束,感谢阅读 ————————

标签:anacron,crontab,调度,cron,etc,任务,计划,linux,执行
来源: https://blog.51cto.com/14223370/2453869

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有