Crontab是一个Linux下的后台进程,用来定期的执行一些任务。对于服务器运维来说是必不可少的,一下简单的脚本命令在Crontab里面配置好就可以完成自动管理运维,比如有些数据表的索引需要定时的整理,有些文件夹内的临时文件需要定时删除,这些都可以通过Crontab提前设定好,然后到时间自动执行。

下面所介绍的Crontab命令,如crontab -e(创建计划任务)和crontab -l(查看已经创建好并执行的计划任务)这两个核心命令在几乎所有的Unix和linux系统上通用,但是其他的命令和介绍的步骤都是基于Ubuntu 14.04介绍的,而其他的平台运行crontab的原理和语法都基本相同,具体操作可以自行查阅资料。
创建计划任务
root@RedScarf:~# crontab -e

no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano        <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny

Choose 1-4 [2]:
在终端输入crontab -e第一次的时候会出现上面描述的这些东西,而它的意思是让你选择编辑器,这里我就输入了3,来选择熟悉的vim编辑器,之后就进入了crontab的编辑界面:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
* * * * * echo "hello" >> hello.txt
我们在最下面输入 * echo "hello" >> hello.txt这一行,这行命令执行的是每一分钟执行一次将hello这个字符串追加到我们用户目录下的hello.txt文件中,我们可以看下效果:
root@RedScarf:~# cat hello.txt
hello
hello
在我打字的时候过去了两分钟,所以文件里面已经写入了两个hello,这就是很神奇的定时计划任务。下面我们来介绍一下我们刚刚输入的那一行究竟代表了什么。
分 时 日 月 周   命令
*  *  *  *  *  command

前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:
分钟          0 - 59
小时          0 - 23
天            1 - 31
月            1 - 12
星期          0 - 6       0表示星期天

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

星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)
逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3     表示一分钟或三分钟
斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两小时。所以 */1 和 * 没有区别 */2 可以看成是能被2整除的任意值。
Crontab当前正在运行的任务查看命令,crontab -l该命令是显示当前用户的crontab列表:
root@RedScarf:~# crontab -l

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
* * * * * echo "hello" >> hello.txt

从上面可以看出和crontab -e所显示的一摸一样,只不过crontab -e可以修改计划任务,而crontab -l只能查看。

如果你需要清除crontab,那么你可以使用crontab -r命令,使用之后就可以清除crontab的计划任务了。

create by 任庆彬