Cron Help Guide

Cron这个词儿来源于希腊的一个表示时间的单词Chronos。在Linux上可以通过Cron设置schedule task,通过这种方式可以让你在每天半夜睡觉的时候自动备份你的文件或者文件夹等等,在自动化测试中可以很好的完成daily build的工作。

 

Cron把每条schedule设置存储在crontab (cron table)文件中。这个文件通常在/etc目录下。另外每个用户也可以有他自己的crontab,这类crontab一般存储在/var/spool/cron文件夹下。编辑crontab的方法也很简单,直接在命令行敲入crontab -e就可以了,默认的编辑器是VI编辑器。

 

好了,直接看例子吧,下面两个例子存贮在/etc/crontab文件中。第一个是用来在每天晚上备份/etc文件夹;第二个是用来运行Analog程序。

12 3 * * * root tar czf /usr/local/daily/etc.tar.gz /etc >> /dev/null 2>&1

52 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1

 

下面这个表详述了每个域的意义

 

 Field   Meaning
    1  Minute (0 - 59)
    2  Hour (2 - 24)
    3  Day of month (1 - 31)
    4  Month (1 - 12, Jan, Fed, etc.)
    5  Day of week (0 - 6) 0 = Sunday, 1 = Monday etc. or Sun, Mon, etc.
    6  User that the command will run as
    7  Command to execute

 

[*]是通配符,意思是忽略这个域。

 

现在解释第一个例子:

 

12 3 * * * root tar czf /usr/local/daily/etc.tar.gz /etc >> /dev/null 2>&1
上句将在每天3:12am运行 tar czf /usr/local/daily/etc.tar.gz /etc。>> /dev/null 2>&1的意思是将所有的标准输出都写入/dev/null (the linux trash can)中,并且将所有的标准错误也输入到/dev/null中,这样就可以是所有的输出都不直接输出在终端上。

 

再来一个复杂点儿的

30 15 13 6 1 * root tar czf /usr/local/daily/etc.tar.gz /etc >> /dev/null 2>&1

该例将在每周一,6月13,3:30am执行

 

也可以通过下面这种方式实现相同的目的:

30 15 13 Jun Mon * root tar czf /usr/local/daily/etc.tar.gz /etc >> /dev/null 2>&1

 

如果想使用Joey这个用户每小时的15分执行某条命令,可以这样:

15 * * * * Joey /usr/bin/somecommand >> /dev/null 2>&1

 

如果想每两小时执行某条命令,可以设置hour域为*/2,将在每天的2am, 4am, 6am, 8am, 10am, 12am, 2pm等执行

0 */2 * * * Joey /usr/bin/somecommand >> /dev/null 2>&1

 

如果想在一个域里设置多个时间点,可以使用逗号,如每小时过15分,30分执行

15,30 * * * * Joey /usr/bin/somecommand >> /dev/null 2>&1

 

如果想在每个月的第一周执行,可以在day域设置1-7,如下,将在每月的第一周每天的每两个小时过15分,30分执行,2:15,2:30,4:15等

15,30 */2 1-7 * * Joey /usr/bin/somecommand >> /dev/null 2>&1

 

如果你想批量运行一些脚本,可以将脚本放在一个文件夹里,如/home/usrname/cron,执行:

18 16 * * * root run-parts /home/usrname/cron >> /dev/null 2>&1

 

如果你想改变输出地址,可以将 >> /dev/null 2>&1 变为 >> /home/user/somecommand.log 2>&1

如果你想搞一个daily日志,可以这样 >> /opt/logs/`date +daily-\%Y\%m\%d-\%H-\%M-\%S.log` 2>&1,其中符号[`]是Tab键上面的那个键,不是单引号。

 

可以通过crontab -l查看所有设置好的schedule tasks

可以通过crontab -r删除crontab

可以通过crontab -e -u username在以某个用户运行

 

正如你所看到的,Cron是一个非常好的自动化工具。

你可能感兴趣的:(linux,脚本,sun)