13-Crontab定时器
1 概述
安装部署centos,默认就开启了
1.1 概念
crontab命令 被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务,提交和管理用户的需要周期性执行的任务。
1.2 命令
crontab 选项 参数
1.2.1 选项
-e:编辑该用户的计时器设置; 使用较多
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
1.2.2 参数
crontab的参数一般是用来指定执行那个crontab的,类似于我们常说的配置文件
1)系统任务调度
系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc
目录下有一个crontab文件,这个就是系统任务调度的配置文件。
[root@attack ~]vi /etc/crontab
# 前面几行属于环境变量
SHELL=/bin/bash 告知shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin 系统环境变量
MAILTO=root 邮件发给那个用户
# For details see man 4 crontabs
# 这里是crontab的定时任务模版 我们参照该模版设置
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
定时器举例:
# 定时器举例
10 * * * * # 每个小时的第10分钟执行一次
1,5,9,26 * * * * #每小时的地1分钟 第5分钟 第9分钟 第26分钟执行一次
3-59 * * * * #第3分钟到59分钟之间每分钟执行一次
* * */10 * * #每10天执行一次
2)用户任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron
目录中。其文件名与用户名一致。
crontab -e 用户级别的定时器 那个用户正在登陆那个用户执行
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
2 服务
2.1 服务的启动停止
# 语法
systemctl start | restart | stop | status | reload crond
启动 重启 停止 查看状态 重新加载
# 每次修改配置文件必须重载配置文件才可以生效
systemctl reload crond
2.2 输出显示
默认状态下系统级别的内容会直接输出到邮件:
/var/spool/mail/用户名(系统级别则为root)
2.3 控制台输出
如果想要前台输出(屏幕输出),查看当前使用的终端
[root@attack ~]# tty
/dev/pts/0
crontab配置终端输出 就可以使用重定向的方式处理:
*/2 * * * * echo `date` > /dev/pts/0
3 案例
在线crontab表达式执行时间计算 - 码工具 (matools.com)
[root@attack ~]crontab -e
*/1 * * * * echo `date` > /dev/pts/0 每分钟向屏幕输出日期与时间一次
案例2:
添加定时任务
crontab -e
每1分钟查看一下输出/etc/passwd的内容
*/1 * * * * cat /etc/passwd
每周一的晚上的23点,查看一下/etc/passwd的内容
* 23 * * 1 cat /etc/passwd
每周的1,3,5晚上23点执行查看/etc/passwd的内容
* 23 * * 1,3,5 cat /etc/passwd
每小时的前半小时执行查看/etc/passwd的命令
1-30 * * * * cat /etc/passwd
每分钟向abc.txt文件写入aaa
*/1 * * * * echo "aaa" >> /home/abc.txt
工作日的9点半执行某个命令
30 9 * * 1-5