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
为*
时表示每分钟都要执行program
,f2
为*
时表示每小时都要执行program
,其余类推。 - 当
f1
为a-b
时表示从第a
分钟到第b
分钟这段时间内要执行,f2
为a-b
时表示从第a
到第b
小时都要执行,其余类推。 - 当
f1
为*/n
时表示每n
分钟间隔执行一次,f2
为*/n
表示每n
小时间隔执行一次,其余类推。 - 当
f1
为a,b,c...
时表示第a,b,c...
分钟要执行,f2
为a,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多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。