0%

[linux] 9.crontab定期执行命令

what is crontab#

crontab used to schedule the execution of programs(每分钟). crontab被daemon进程所管理。 - 用户各自定义的crontab, crontab下的Commands也只会 运行在从属的用户下.

  • crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

  • 注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

linux 任务调度的工作主要分为以下两类:

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

how to use#

语法

1
crontab [ -u user ] { -l | -r | -e }
- u user 是指设定指定 user 的时程表。如不使用 -u user 的话, 默认 设定自己的时程表

参数说明:

  • e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI
  • r : 删除目前的时程表
  • l : 列出目前的时程表

时间格式如下:

1
f1 f2 f3 f4 f5 command
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序 - 当 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...个小时要执行
1
2
3
4
5
6
7
8
*    *    *    *    *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

more example#

1
2
3
4
5
6
7
* * * * * /bin/ls  # 每一分钟执行一次 /bin/ls

20 0-23/2 * * * echo "haha" # 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"

30 6 */10 * * ls # 每月的1、11、21、31日是的6:30执行一次ls命令

5 4 * * sun echo "run at 5 after 4 every sunday"

实际运用#

之前遇到了如下问题: cannot create temp file for here-document: No space left on device 这是由于/var/log/里的log很快就满了, 因此使用crontab定期清理一波日志

1.切换到root#

只有root才有权限清理/var/log/文件

1
su
##### 2. 编辑crontab
1
crontab -e
设置 每天早上10点定期清理日志文件, 如下
1
2
* 10 * * * echo "" > /var/log/messages
* 10 * * * echo "" > /var/log/syslog
##### 3. 查看crontab是否生效
1
2
3
# crontab -l
* 10 * * * echo "" > /var/log/messages
* 10 * * * echo "" > /var/log/syslog

reference#

  1. crontab
  2. linux crontab命令