ubuntu 使用crontab实现工作排程

Cron是Linux系统中最有用的工具之一,cron作业是在指定时间到来时被调度执行的作业。

最常见的自动化系统管理和自动维护工作,比如每天发出的按计划完成了备份的通知,或者是按计划定时清理/tmp/目录的通知。还有很多Web应用程序也需要执行定时作业。到时间吃饭了发送一封邮件通知你可以吃饭了,通知你比赛开始了等等

Linux 上常见的例行性工作

1.进行登录档的轮替 (log rotate):
Linux 会主动的将系统所发生的各种资讯都记录下来,这就是登录档 。
由於系统会一直记录登录资讯,所以登录档将会越来越大!我们知道大型文件不但占容量还会造成读写效能的困扰,
因此适时的将登录档数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录资讯。这就是 log rotate
的任务!这也是系统必要的例行任务;

2.登录档分析 logwatch 的任务:
如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误资讯都会被记录到登录档中,
因此系统管理员的重要任务之一就是分析登录档。但你不可能手动透过 vim 等软件去检视登录档,因为数据太复杂了!
我们的 CentOS 提供了一只程序『 logwatch 』来主动分析登录资讯,所以你会发现,你的 root 老是会收到标题为 logwatch
的信件,那是正常的!你最好也能够看看该信件的内容喔!

3.创建 locate 的数据库:
在第七章我们谈到的 locate 命令时,
我们知道该命令是透过已经存在的档名数据库来进行系统上档名的查询。我们的档名数据库是放置到 /var/lib/mlocate/ 中。
问题是,这个数据库怎么会自动升级啊?嘿嘿!这就是系统的例行性工作所产生的效果啦!系统会主动的进行
updatedb 喔!

4.whatis 数据库的创建:
与 locate 数据库类似的,whatis 也是个数据库,这个 whatis 是与
man page 有关的一个查询命令,不过要使用 whatis 命令时,
必须要拥有 whatis 数据库,而这个数据库也是透过系统的例行性工作排程来自动运行的哩!

5.RPM 软件登录档的创建:
RPM 是一种软件管理的机制。由於系统可能会常常变更软件,
包括软件的新安装、非经常性升级等,都会造成软件档名的差异。为了方便未来追踪,系统也帮我们将档名作个排序的记录呢!
有时候系统也会透过排程来帮忙 RPM 数据库的重新建置喔!

6.移除缓存档:
某些软件在运行中会产生一些缓存档,但是当这个软件关闭时,这些缓存档可能并不会主动的被移除。
有些缓存档则有时间性,如果超过一段时间后,这个缓存档就没有效用了,此时移除这些缓存档就是一件重要的工作!
否则磁碟容量会被耗光。系统透过例行性工作排程运行名为 tmpwatch 的命令来删除这些缓存档呢!

7.与网络服务有关的分析行为:
如果你有安装类似 WWW 服务器软件 (一个名为 apache 的软件),那么你的 Linux 系统通常就会主动的分析该软件的登录档。
同时某些凭证与认证的网络资讯是否过期的问题,我们的 Linux 系统也会很亲和的帮你进行自动检查!

cron工作介绍

1./etc/cron.deny和 /etc/cron.allow

为了安全性的问题, 我们可以限制使用 crontab 的使用者帐号喔!

/etc/cron.allow:
将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;

/etc/cron.deny:
将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。

2.crontab语法

[[email protected] ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

(1)基本上所有的Linux发行版在默认情况下都预安装了cron工具。即使未预装cron,也很简单,执行命令手动安装它:

[email protected]:~# apt-get install cron

(2)接着检查cron服务的状态,默认情况它应该运行于后台。如果它未启动,那么可以手动启动此服务。

[email protected]:/var/log$ sudo service cron status
cron start/running, process 1024
[email protected]:~# service cron start

[email protected]:~# service cron stop

(3)使用crontab

  1、对Cron作业进行列表

  列出当前用户计划的cron作业 :      [email protected]:~# crontab –l

  如果想查看其它用户的cron作业,可以使用命令: [email protected]:~# crontab –l –u username 这会列出指定用户的cron作业。

  2、编辑Cron作业     [email protected]:~# crontab -e

  3、移除Cron作业  [email protected]:~# crontab –r   或者 [email protected]:~# crontab –ir 会进行询问是否删除

(4)用Crontab计划任务

文件内容语法

栏位的意义为:

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

分  时  日    月      周   command

15  2   2      *       *         mail   [email protected] < /home/user/news          每个月第二天上午2:15给[email protected] 发送news

* (星号)      表示接受任何时间

,(逗号)  * 3,6 * * *   表示该位置3和6都行

-(减号)     * 3-6 * * *   代表3-6这一段时间范围

/n(斜线)  那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思     例如每五分钟进行一次,则:  */5 * * * * command

Cron有两种配置文件类型,用于调度自动化任务。

1)系统级

系统的配置档: /etc/crontab

你只要编辑 /etc/crontab 这个文件就可以啦!有一点需要特别注意喔!那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个『纯文字档』喔!你可以 root 的身份编辑一下这个文件哩!

基本上, cron 这个服务的最低侦测限制是『分钟』,所以『 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 』,因此,只要你编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动的会来运行了!

注意:修改完之后需要重新启动:service crontab restart

/etc/crontab 的内容

[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash                     <==使用哪种 shell 介面
PATH=/sbin:/bin:/usr/sbin:/usr/bin  <==运行档搜寻路径
MAILTO=root                         <==若有额外STDOUT,以 email将数据送给谁
HOME=/                              <==默认此 shell 的家目录所在

# run-parts
01  *  *  *  *   root      run-parts /etc/cron.hourly   <==每小时
02  4  *  *  *   root      run-parts /etc/cron.daily    <==每天
22  4  *  *  0   root      run-parts /etc/cron.weekly   <==每周日
42  4  1  *  *   root      run-parts /etc/cron.monthly  <==每个月 1 号
分 时 日 月 周 运行者身份  命令串

Ubuntu调用run-parts命令,定时运行四个目录下的所有脚本。
/etc/cron.hourly下的脚本会被每小时运行一次,在每小时的17分时运行。
/etc/cron.daily下的脚本会被每天运行一次,在每天6点25分运行。
/etc/cron.weekly下的脚本会被每周运行一次,在每周第7天的6点47分运行。
/etc/cron.monthly下的脚本会被每月运行一次,在每月1号的6点52分运行。
以上执行时间可自行修改

2)用户级

Crontab语法如下:

[email protected]:~# crontab –e

写入以下的脚本

  SHELL=/bin/bash

  HOME=/

  MAILTO=”[email protected]”

  #This is a comment

  * * * * * echo ‘test cron job to execute every minute‘

  :wq! 保存并退出
[email protected]:/var/log$ sudo ls -al /var/spool/cron/crontabs/
drwx-wx--T 2 root   crontab 4096 10月 11 18:36 .
drwxr-xr-x 5 root   root    4096 10月  2 23:10 ..
-rw------- 1 root   crontab 1114 10月 11 18:34 root
-rw------- 1 yeqing crontab 1115 10月 11 18:36 yeqing

3.可唤醒停机期间的工作任务

举例来说,如果你每天晚上都要关机,等到白天才启动你的 Linux 主机时,由於  默认的工作排程都在 4:02am 每天进行,唔!如此一来不就一堆系统例行工作都没有人在做了!那可怎么办?此时就得要 anacron 这家伙了!

什么是 anacron

anacron 并不是用来取代 crontab 的,anacron 存在的目的就在於我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的运行!所以 anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了。

总结

  可以看到,用crontab实现自动化任务是很容易的,而且它可以按分钟、小时、周、月、星期来执行任务。除此之外,Linux还有一个at命令,它适用于处理只执行一次的任务,且需要先运行atd服务。

   其次要注意环境变量的问题。有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在 crontab文件中没有配置环境变量引起的。在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在 当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任 务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。

  还要注意清理系统用户的邮件日志。每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。

  最后要注意,新创建的cron作业,不会马上执行,至少要过2分钟才执行。如果重启cron服务则会马上执行。

参考:

在Ubuntu 14.04使用cron实现作业自动化

第十六章、例行性工作排程 (crontab)

时间: 2024-10-12 13:01:17

ubuntu 使用crontab实现工作排程的相关文章

第十六章、例行性工作排程 (crontab)

1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作 2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: /etc/at.deny 2.2 实际运行单一工作排程: at, atq & atrm, batch 3. 循环运行的例行性工作排程 3.1 使用者的配置: /etc/cron.deny, crontab 3.2 系统的配置档: /etc/crontab 3.3 一些注意事项 4. 可唤醒停机期

Linux例行性工作排程 (crontab)

crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,是毫无疑问的. 使用者的配置 使用者想要创建循环型工作排程

例行性工作排程 (crontab)

1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: /etc/at.deny 2.2 实际运行单一工作排程: at, atq & atrm, batch3. 循环运行的例行性工作排程 3.1 使用者的配置: /etc/cron.deny, crontab 3.2 系统的配置档: /etc/crontab 3.3 一些注意事项4. 可唤醒停机期间的工

例行性工作 排程(crontab)

一,什么是例行性工作排程? 计划任务:比如每天,每周,每月,每年或者指定时间需要执行的工作任务 1,Linux工作排程的种类:at,cron a)at :at 处理仅执行一次任务,依赖于atd服务 b)crontab :crontab处理循环的任务, 可循环的时间为分钟.小时.每周.每月或每年等. crontab 除了可以使用指令执行外,也可以编辑 /etc/crontab 来支持. 依赖于crond服务 2,Linux上常见的例行性工作 (1)进行 登录记录的轮询(log rotate) (2

linux例行性工作排程

1.例行性排程有两中方式: 1)每隔一定周期就要来办的事项,用crontab指令实现 2)突发性的,就是这次做完后,就没有了用at指令实现,不过这个需要atd服务的支持 2.linux常见的例行性任务有: 1)进行登录档的轮替:linux会将系统所发生的各种信息都记录下来,这就是登录档,随着系统的运行这些登录档会越来越大,导致系统读写效能下降,因此就需要将这些数据按时间的新旧分别存放,这就是登录档的轮替任务 2)登录文件分析:如果系统发生了软件问题,硬件错误,资源安全问题等,绝大部分的错误都会被

Linux-例行性工作排程

1. 例行性工作排程的种类 一种是例行性的,即每隔一定的周期要执行一次的: 一种是突发性的,即只要做一次就好啦. 为了要达成以上两个功能,就要使用at和crontab这两个指令啦. at : at是处理仅运行一次就结束排程的命令,不过要运行 at,必须要有 atd 这个服务的支持才行,atd 可能默认并没有启动,那么 at 这个命令就会失效. crontab : crontab 这个命令所配置的任务将会循环一直执行,可循环的时间有分钟.小时.每周.每月或每年等.crontab 除了可以使用命令运

工作排程

工作排程 单一工作排程at atd服务 使用单一工作排程时必须先开启atd服务. 查看atd服务目前的状态:systemctl status atd 重新启动atd服务:systemctl restart atd 设置atd服务开机启动:systemctl enable atd 执行at的过程 当执行at指令时,会把工作以文本文件的形式写入/var/spool/at/目录下,该工作就会被atd服务调用并执行. 一般来说要对at的使用进行限制,因为黑客经常使用工作排程收集信息,为了限制at的使用,

0patch亲自修补Windows工作排程器漏洞

专门打造微修补程序(Micropatch)的0patch,本周出面修补了SandboxEscaper在5月所公布的Windows 10工作排程器(Task Scheduler)零时差漏洞,该漏洞允许本地端***扩张权限以执行任意程序.这已是0patch第二次修补SandboxEscaper所揭露的漏洞,去年8月SandboxEscaper也对外公布了另一个有关工作排程器的零时差漏洞,0patch亦于微软之前释出微修补.0patch的安全研究人员Simon Raner解释,去年的工作排程器漏洞允许

鸟哥私房菜基础篇:例行性工作排程 (crontab)习题

猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0430cron.php 1-今天假设我有一个命令程序,名称为: ping.sh 这个档名!我想要让系统每三分钟运行这个文件一次, 但是偏偏这个文件会有很多的信息显示出来,所以我的 root 帐号每天都会收到差不多四百多封的信件,光是收信就差不多快要疯掉了! 那么请问应该怎么配置比较好呢? 这个涉及数据流重导向的问题,我们可以将他导入文件或者直接丢弃!如果该信息不重要的话, 那么就予以丢弃,如果信息很重