crontab的功能是以一定的时间间隔调度一些命令的执行。用于设置在特定的时间执行特定的功能,是linux系统管理员常用的工具之一。
在系统中有两个地方可以存储用户设置的命令。
一个在/etc目录之下,有一个名为crontab的文件,利用vim crontab可以在crontab中加入设置的命令。
另一个在/var/spool/cron目录之下,有以用户名命名的文件,利用crontab -u user -e可以在以自己命令的文件中加入设置的命令,例如crontab -u liyang -e就可以在
/var/spool/cron/liyang中添加针对liyang的命令。
由此可见,/etc/crontab针对的是系统级,即针对整个系统设置定时执行的命令。/var/spool/cron/user针对的是用户级,即针对某个特定用户设置定时执行的命令。
一般linux系统管理员只需在/etc/crontab下设置定时命令即可。
linux设置了/etc/cron.allow和/etc/cron.deny两个文件来控制crontab的使用。/etc/cron.allow记录了哪些用户可以使用crontab,/etc/cron.deny则记录了哪些用户不可以使用crontab。如果两个文件同时存在,只有/etc/cron.allow起作用。如果都不存在,则只有root可以使用crontab。
下面是一个未加入任何命令的/etc/crontab文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
可以看出,crontab中的语句格式为
* * * * * 用户名 可执行命令
五个”*“分别表示“分钟”、“小时”、“日期”、“月份”、“星期”,取值分别为“0~59”、“0~23“、”1~31“、”1~12“、”0~6“。
接下来举个例子来使用crontab。
先写一个脚本,脚本的功能是将/root下的文件进行打包压缩且以系统时间命名,压缩文件存放在/root/backup目录下。脚本如下
1 #! /bin/bash
2
3 if [ ! -d "/root/backup" ];then
4 mkdir /root/backup
5 fi
6
7 cd /root/backup
8
9 Year=$(date +%y)
10 Month=$(date +%m)
11 Day=$(date +%d)
12 Hour=$(date +%H)
13 Minute=$(date +%M)
14 Second=$(date +%S)
15
16 FILENAME=$Year$Month$Day$Hour$Minute$Second.tar.gz
17
18 tar -zcvf $FILENAME /root/*
接下来在/etc/crontab文件中添加任务,修改后的文件为
1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4 HOME=/
5
6 # For details see man 4 crontabs
7
8 # Example of job definition:
9 # .---------------- minute (0 - 59)
10 # | .------------- hour (0 - 23)
11 # | | .---------- day of month (1 - 31)
12 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
13 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
14 # | | | | |
15 # * * * * * user-name command to be executed
16
17 */20 * * * * root /root/backup.sh
注意17行的语句,它表明每隔20分钟执行一次/root/backup.sh脚本。
最后在/root/backup目录下发现备份的文件,crontab生效。