1. 什么是crontab

crontab是Linux系统中用于设置周期性执行命令的工具。当安装完成操作系统后,crontab服务默认会自动启动。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。需要注意的是,新创建的cron任务不会立即执行,至少要过2分钟才可以。当然,也可以重启cron服务来马上执行。

Linux定时调度的工作主要分为以下两类:

  • 系统执行的工作:系统周期性执行的工作,例如备份系统数据、清理缓存。
  • 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

2. crontab命令的基本用法

2.1 命令格式

crontab命令的基本用法如下:

crontab [-u user] file

crontab [-u user] { -l | -r | -e }

说明:

  • crontab用于让用户在固定时间或固定间隔执行程序,相当于用户的时程表。
  • -u user是指操作指定用户的时程表,这个前提是你必须要有相应权限(例如root)才能够指定他人的时程表。如果不使用-u user的语法,就表示设定自己的时程表。

2.2 参数说明

  • -e:执行文本编辑器来设定时程表。内定的文本编辑器是Vi/Vim。如果你想用别的文本编辑器,则需先设定VISUAL环境变量来指向想要的文本编辑器。例如,使用joe编辑器,可以设置如下:

    export VISUAL=joe
  • -r:删除目前的时程表。
  • -l:列出目前的时程表。

查看当前用户的crontab文件:

crontab -l

编辑当前用户的crontab文件:

crontab -e

删除当前用户的crontab文件:

crontab -r

列出某个用户的crontab文件(需要有相应权限):

crontab -u username -l

编辑某个用户的crontab文件(需要有相应权限):

crontab -u username -e

3. crontab文件格式

crontab文件格式如下:

f1 f2 f3 f4 f5 program

其中,f1表示分钟,f2表示小时,f3表示一个月中的第几日,f4表示月份,f5表示一个星期中的第几天,program表示要执行的程序。

  • f1*时表示每分钟都要执行programf2*时表示每小时都要执行program,其余类推。
  • f1a-b时表示从第a分钟到第b分钟这段时间内要执行,f2a-b时表示从第a到第b小时都要执行,其余类推。
  • f1*/n时表示每n分钟间隔执行一次,f2*/n表示每n小时间隔执行一次,其余类推。
  • f1a,b,c...时表示第a,b,c...分钟要执行,f2a,b,c...时表示第a,b,c...小时要执行,其余类推。

4. 示例

以下是一些crontab文件中的时间设置及其含义:

  • * * * * *:每分钟执行一次
  • 0 * * * *:每小时的第0分钟执行一次
  • 0 0 * * *:每天的午夜执行一次
  • 0 0 1 * *:每月的第1天午夜执行一次
  • 0 0 * * 0:每周日的午夜执行一次
  • 0 8-17 * * *:每天从上午8点到下午5点每小时执行一次

5. 示例说明

在CentOS系统中设置具体的crontab任务:

5.1 每天凌晨2点备份网站数据

假设我们需要每天凌晨2点备份/var/www/html目录中的网站数据到/backup目录下,可以编辑crontab文件并添加如下内容:

0 2 * * * tar -zcvf /backup/website_backup_$(date +\%F).tar.gz /var/www/html

这表示每天的凌晨2点,使用tar命令将/var/www/html目录压缩并保存到/backup目录中,文件名为website_backup_YYYY-MM-DD.tar.gz

5.2 每周一凌晨3点清理临时文件

为了每周一的凌晨3点清理临时文件,可以在crontab文件中添加如下内容:

0 3 * * 1 find /tmp -type f -mtime +7 -exec rm {} \;

这表示每周一的凌晨3点,使用find命令查找并删除/tmp目录下超过7天的文件。

5.3 每月的第一天凌晨4点同步数据到远程服务器

如果我们需要每月的第一天凌晨4点将数据同步到远程服务器,可以在crontab文件中添加如下内容:

0 4 1 * * rsync -avz /data/ user@remote-server:/data/

这表示每月的第一天凌晨4点,使用rsync命令将/data/目录同步到远程服务器的/data/目录中。

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝