在安装完成操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的。crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务。
权限控制
crontab 是通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的:
- 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。
- 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。
常用命令
-u user 用来设定某个用户的 crontab 服务
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i 在删除用户的 crontab 文件时,给确认提示。
定时任务配置
crontab 定时任务非常简单,只需执行crontab -e
命令,然后输入想要定时执行的任务即可。
当我们执行crontab -e
命令时,打开的是一个文件,而且操作方法和 Vim 是一致的。这个文件的格式才是我们真正需要学习的内容,文件格式如下:
# crontab -e
进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
通过 5 个*
来确定命令或任务的执行时间的,这 5 个*
- 第一个
*
一小时当中的第几分钟(minute)0~59 - 第二个
*
一天当中的第几小时(hour)0~23 - 第三个
*
一个月当中的第几天(day)1~31 - 第四个
*
一年当中的第几个月(month)1~12 - 第五个
*
一周当中的星期几(week) 0~7(0和7都代表星期日)
时间特殊符号含义:
时间 | 含义 |
---|---|
* |
代表任何时间。比如第一个* 就代表一小时种每分钟都执行一次的意思。 |
, |
代表不连续的时间。比如 "0 8,12,16 * * * 命令" 代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
- |
代表连续的时间范围。比如 "0 5 * * 1-6 命令" 代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/ |
代表每隔多久执行一次。比如 "*/10 * * * * 命令" 代表每隔 10 分钟就执行一次命令。 |
举例:
45 22 * * * 命令,表示 在 22 点 45 分执行命令
0 17 ** 1命令,表示在每周一的 17 点 0 分执行命令
0 5 1,15**命令,表示在每月 1 日和 15 日的凌晨 5 点 0 分执行命令
40 4 ** 1-5命令,表示在每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 ***命令,表示在每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1命令,表示在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆
当crontab -e
编辑完成之后,一旦保存退出,那么这个定时任务实际就会写入 /var/spool/cron/ 目录中,每个用户的定时任务用自己的用户名进行区分。
在书写 crontab 定时任务时,需要注意以下几个事项:
- 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
- crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
- 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
- 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。
网友评论