Linux 的 crontab 定时重复任务

cron (crond) 工具是 Linux 上面的用来执行周期性任务的工具,比如每天凌晨进行数据统计,定期备份数据库,写缓存数据到硬盘、日志清理等。

以下环境在 Ubuntu 14.04 64位,更多信息查看 crontab 定时任务

基本组成

  • 系统服务 :cron(crond) (crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务)
  • 配置文件:以文件方式设置定时任务(在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件)
  • 配置工具 :crontab 用于调整任务
1
2
3
4
5
# 查看当前任务
$ crontab -l

# 查看 cron 服务的状态
$ service cron status

添加任务

1
$ crontab -e

出现一个文件,在文件末尾添加一个任务:每天的 04:20 执行一行命令,输出 ‘hello world’ 到 /var/tmp/log 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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
20 4 * * * echo 'hello world' >> /var/tmp/log

添加一条任务的格式

1
2
3
4
5
6
7
*  *  *  *  *     COMMAND
| | | | |
| | | | +--> 星 期 0 ~ 7 ( 0 或 7 表 示 星 期 天 )
| | | +-----> 月 份 1 ~ 12
| | +--------> 日 期 1 ~ 31
| +-----------> 小 时 0 ~ 23
+--------------> 分 钟 0 ~ 59

crontab 文件的一些例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 每晚的 21:30 重启 apache
$ 30 21 * * * /usr/local/etc/rc.d/lighttpd restart

# 每月 1、10、22 日的 4:45 重启 apache
$ 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

# 每周六、周日的 1:10 重启 apache
$ 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

# 每天 18:00 至 23:00 之间每隔 30 分钟重启 apache
$ 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

# 每星期六的 23:00 重启 apache
$0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

# 每一小时重启 apache
$ * */1 * * * /usr/local/etc/rc.d/lighttpd restart

# 23 点到早上 7 点之间,每隔一小时重启 apache
$ * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
1
2
# 列出用户目前的crontab
$ crontab -l

其他配置

所有用户定义的 crontab 文件都被保存在 /var/spool/cron 目录中。其文件名与用户名一致。
使用者权限文件:
文件:/etc/cron.deny ,该文件中所列用户不允许使用 crontab 命令
文件:/etc/cron.allow ,该文件中所列用户允许使用 crontab 命令
文件:/var/spool/cron/ ,所有用户 crontab 文件存放的目录,以用户名命名

文章来自: https://hanks.pub