Linux定时任务Crontab命令详解

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

crontab简易入门

假设我要设置一个任务,每分钟就要做一个数据同步,这个同步脚本的路径是/home/blue/do/rsyncfile.sh,那么我可以在这么配置,使用blue用户,在终端输入

crontab -e

# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。

#分 时 日 月 周

<==============任务的完整命令行

* * * * * /home/blue/do/rsyncfile.sh

默认情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『 crontab -e』去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入『 :wq』储存后离开 vi 就可以了!

假如我们需要修改为每5分钟运行数据同步的脚本,那么同样使用 crontab -e 进入编辑:

*/5 * * * * /home/blue/do/rsyncfile.sh

假如服务器出了问题,有一天的数据没有同步,于是我们就需要补数据了,假设这个补数据的脚本是/home/blue/do/rsyncfile_day.sh,但是白天是高峰期,晚上用户不多,是低峰期,我们补数据会占用大量带宽,尤其是白天,会影响正常业务,所以一般我们可以让补数据任务在凌晨2点开始跑,那么同样使用crontab -e 进入编辑:

0 2 1 4 * /home/blue/do/rsyncfile_day.sh

这样,在4月1号凌晨2点0分就会开始启动我们的补数据的脚本了。

同步数据,在互联网公司是再平常不过的任务了,这里大家可以看到crontab的魅力所在了,只需要写最简单的业务逻辑,把调度交给crond做,就完成了一个可靠性很高的一项任务了,如果要自己去额外写这种调度程序,不知道要花多少精力才能做到可靠稳定。

crontab的语法

crontab [-u username] [-l

-e

-r]

选项与参数:

-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;

-e :编辑 crontab 的工作内容

-l :查阅 crontab 的工作内容

-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

查询使用者目前的 crontab 内容:

crontab -l

*/5 * * * * /home/blue/do/rsyncfile.sh

0 2 1 4 * /home/blue/do/rsyncfile_day.sh

清空使用者目前的 crontab:

crontab -r

crontab -l

no crontab for blue

如果你想删除当前用户的某一个crontab任务,那么使用crontab -e进入编辑器,再删除对应的任务。

crontab的限制

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

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

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

/etc/crontab配置文件讲解

『 crontab -e 』是针对使用者的 cron 来设计的,如果是『系统的例行性任务』时,就要编辑 /etc/crontab这个文件。

那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是/etc/crontab 可是一个『纯文字档』,必须用 root 的身份编辑一下这个文件。

首先我们要来看看crontab的文件内容

cat /etc/crontab

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the`crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have usernamefields,

# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command

17 * * * * root cd / && run-parts --report/etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron

( cd / && run-parts --report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron

( cd / && run-parts --report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron

( cd / && run-parts --report /etc/cron.monthly )

这个文件与将刚刚我们下达 crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同

PATH=....:

这里就是输入运行档的搜寻路径!使用默认的路径配置就已经很足够了!

17 * * * * root cd / && run-parts --report/etc/cron.hourly:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15828.html