Linux 计划任务(crontab)
介绍
- crontab 是让系统在特定的时间去执行某项任务
- 系统允许个人用户设定以及系统全局设定
cron 配置
# 通过配置cron.allow和cron.deny文件进行管理
vi /etc/cron.allow # 将允许设置cron的用户名写入文件,一行一个名字
vi /etc/cron.deny # 写入不允许的用户
# cron.allow文件的优先级要比cron.deny文件高
service cron status # 查看cron的开启状态
service cron start # 开启cron服务
service cron stop # 关闭cron服务
service cron restart # 重新启动cron服务
- 用户配置的cron文件会保存到 /var/spool/cron/crontabs 这个目录
- 用户使用 crontab 命令进行配置,输入命令后系统会提示你选择什么编辑器
- cron的日志文件保存在 /var/log/cron 或 /var/log/cron.log
- 如果找不到日志文件需要修改
vim /etc/rsyslog.d/50-default.conf
# 其中有一行,把注释去掉
#cron.* /var/log/cron.log
- 系统配置则需要修改 /etc/crontab 这个配置文件
cron配置文件关于时间的说明
意义 |
分钟 |
小时 |
日期 |
月份 |
周 |
执行者 |
命令 |
范围 |
0~59 |
0~23 |
1~31 |
1~12 |
0~7 |
root |
command |
- 周 0~7 其中数字0和7都表示星期天
- 周与日月不能同时存在
- 执行者在用户定义配置中是不存在的,也就是用户定义不需要写执行者这一列
- 配置命令时一定要写绝对路径
- 如果同一时间有多个任务,最好用逗号的方法将时间搓开
- 为了防止cron将输出以邮件形式发给用户,时间长了会占用磁盘空间
可以将命令从定向 >/dev/null 2>&1
- 最好查看邮箱里是否有无用的cron信息 /var/mail/$user
特殊字符 |
意义 |
*(星号) |
代表任何时候,也就是说不论什么时候没有确切的时间 |
,(逗号) |
代表分割,例:3,4,6 表示3点4点6点 |
-(横杠) |
代表范围,例:3-6 表示3456点都有 |
/n(斜线/数字) |
代表每隔,例:*/1 表示每隔一分钟,就是每分钟执行一次 |
- 特殊字符的意义说的有点模糊,看了具体实例就会明白了
用户配置cron
# 用户可以使用 crontab 命令来设置
crontab [-u username] [-l] [-e] [-r]
# -u 只能root用户使用,指定为哪个别的用户创建配置
# -l 列出现在已经配置好的内容
# -e 编辑内容
# -r 删除所有内容,如果要删除一条,用 -e 进去编辑
# 范例:输入 crontab -e 后编辑文件
59 23 1 5 * /bin/echo 999 > /dev/tty1
# 在5月1号23点59分 执行向终端输出999,注意要使用绝对路径
*/5 * * * * /home/xx/test.sh
# 每5分钟执行一次test脚本,注意要使用绝对路径
20 8-12 * * * command
# 8点到12点之间,每小时的20分时执行命令
0 3,6 * * * command
# 每天3点和6点执行命令
crontab -l # 查看你的任务内容
crontab -r # 删除所有的内容
crontab -e # 继续编辑,可以删除单独的内容
系统配置cron
- 系统配置直接 vi /etc/crontab
- 配置文件不同的就是前面提到过的在时间和命令中间多了一个执行者
vi /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
- MAILTO= 就是如果有输出的话将会发系统邮件给谁,一般将它重定向到/dev/null
- PATH= 就是执行命令是的查找路径,一般在命令处使用绝对路径
- run-parts 可以man一下这个命令,就是执行某个文件夹里的脚本
- 注意中间有个 user 字段,这个就是和用户配置不一样的地方
- SHELL= 是你要使用哪种shell接口
- HOME= 是默认shell的主文件夹是哪个
结束