crontab使用方法

来源:互联网 发布:九章算法基础班视频 编辑:程序博客网 时间:2024/06/02 23:50
crontab用于定时执行任务。

1、在命令窗中输入:

crontab -e

如果是第一次打开,会让你选择使用的文本编辑器。我选vim(以后可以使用select -editor更改)

打开后,最后看到的是
m h  dom mon dow   command

简单写一个定时任务:每隔5分钟,输出当前时间到文件time.log中
*/5 * * * * date >> /home/xyw/time.log

保存文件后,需要重启cron服务才能生效。
sudo service cron restart

下面解释一下crontab每行的含义:

引用自:http://darkbaby123.iteye.com/blog/715443

crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:

分钟          0 - 59

小时          0 - 23

天              1 - 31

月              1 - 12

星期          0 - 6       0表示星期天

除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:

星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)

逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟

斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别
注:*/2 可以看成是能被2整除的任意值。

实例:
    * * * * *               # 每隔一分钟执行一次任务      0 * * * *               # 每小时的0点执行一次任务,比如6:00,10:00      6,10 * 2 * *            # 每个月2号,每小时的6分和10分执行一次任务      */3,*/5 * * * *         # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06  

因为cron中的任务基本就是执行命令行,所以当然也会有权限问题。以上例子中的任务就是以你当前登录用户的权限执行的,如果你需要以root用户执行某个任务,可以在crontab前加上sudo。

sudo crontab -e

crontab文件对每个用户都是不同的,所以刚才设置的定期看时间的任务,在这里是看不到的。因为我们没有为root用户增加这样的计划任务。
我们一般使用crontab执行脚本命令,下面介绍一下脚本命令在crontab中的使用方法。

以sh脚本执行Java程序中制作的脚本为例。
 
   #!/bin/bash     cd /home/xyw/     /usr/lib/jvm/jdk1.7.0_21/bin/java Hello

假设这个脚本命名为hello.sh 并且存放在/home/xyw/目录下,我想每30分钟执行这个脚本,并且想把结果保存到文件Log.log 中,写法如下:
*/30 * * * * bin/sh /home/xyw/hello.sh >> /home/xyw/Log.log

如果我想一次执行多个任务呢?假如我还想将执行时间保存到Log.log 文件中,写法如下:
*/30 * * * * date >> /home/xyw/Log.log; bin/sh /home/xyw/hello.sh >> /home/xyw/Log.log

两个任务之间用分号间隔。关于一条crontab执行多个任务的方法,具体说明如下:

方法一:
*/30 * * * * bin/sh /home/xyw/task1.sh*/30 * * * * bin/sh /home/xyw/task2.sh

方法二:
*/30 * * * * bin/sh /home/xyw/task1.sh; bin/sh /home/xyw/task2.sh

方法三:
*/30 * * * * bin/sh /home/xyw/task1.sh && bin/sh /home/xyw/task2.sh

方法四:
*/30 * * * * bin/sh /home/xyw/task1.sh || bin/sh /home/xyw/task2.sh

注意,以上方法中方法一和方法二等同。多个命令放在一行,他们的执行情况需要根据中间的分隔符确定。

(1)每个命令被分号分隔,那么命令会连续依次执行下去。

(2)每个命令被&&分隔,命令会按照出现的顺序依次执行,如果在执行命令的过程中出现错误,即中间有错误的命令存在,则以后的命令不会被执行。(相当于与运算,全部命令都没有错误时,才全部执行完成。)

(3)每个命令被||分隔,如果命令遇到可以成功执行的命令,那么命令停止执行,即使后面还有正确的命令则后面的所有命令都将得不到执行。假如命令一开始就执行失败,那么就会执行 || 后的下一个命令,直到遇到有可以成功执行的命令为止,假如所有的都失败,则所有这些失败的命令都会被尝试执行一次。

有关crontab命令的使用方法,可以参看官方的教程,写的很详细:https://help.ubuntu.com/community/CronHowto
参考:http://darkbaby123.iteye.com/blog/715443

http://fenglingcorp.iteye.com/blog/128927

http://bithanpeng.iteye.com/blog/1273155