定时任务
查看服务相关信息
shell
$ systemctl status crond // crond状态
$ systemctl is-enabled crond // 是否开机自启表达式概述
.---------------- minute (0 - 59):代表分钟,取值范围00-59
| .------------- hour (0 - 23):代表小时,取值范围00-23
| | .---------- day of month (1 - 31):代表月份中的日期,取值范围01-31
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...:代表月份,取值范围01-12
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed特殊符号含义
| 特殊符号 | 含义 |
|---|---|
| * | 表示任意时间都,也是”每”的意思,举例:如 00 23 * * *cmd 表示每月每周每日的 23:00 都执行 cmd 任务 |
| - | 表示分隔符,表示一个时间段范围段,如 17-19 点,每小时的 00 分执行任务,00 17-19 * * * cmd 。就是 17,18,19 点整点分别执行的意思 |
| , | 表示分隔时段的意思,30 17,18,19 * * _ /bin.sh /scripts/dingjian.sh 表示每天 17,18 和 19 点的半点时刻执行/scripts/dingjian.sh 脚本。也可以和”-”结合使用,如:30 3-5,17-19 _ * * /scripts/dingjian.sh |
| /n | 即”每隔 n 单位时间”,如:每 10 分钟执行一次任务可以写成 /10 _ * * _ cmd,其中“/10”的范围是 0-59,因此也可以写成 0-59/10 |
命令概述
指定语法
shell
crontab [-u user] file
crontab -u user
(default operation is replace, per 1003.2)
-e (edit user's crontab) 编辑用户命令
-l (list user's crontab) 列表
-r (delete user's crontab) 删除用户任务
-i (prompt before deleting user's crontab) 在删除前确认
-s (selinux context)| 参数 | 含义 | 示例 |
|---|---|---|
| -l | 查看 crontab 文件内容,提示:l 为 list 的缩写 | crontab -l |
| -e | 编辑 crontab 文件内容,提示:e 可为 edit 的缩写 | crontab -e |
| -i | 删除 crontab 文件内容,删除前会提示确认,用得少 | crontab -ri |
| -r | 删除 crontab 文件内容,用得很少 | crontab -r |
| -u | 指定使用的用户执行任务 | crontab -u boy -l |
-I –r 参数在生产中很少用,没什么需求必须要用-e 进去编辑即可
补充: crontab {-l|-e} 实际上就是在操作/var/spool/cron/当前用户这样的文件
相关文件
| 文件 | |
|---|---|
| /etc/cron.deny | 该文件中所列用户不允许使用 crontab 命令 |
| /etc/cron.allow | 该文件中所列用户允许使用 crontab 命令,优先于/etc/cron.deny |
| /var/spool/cron/ | 所有用户 crontab 配置文件默认都存放在此目录,文件名以用户名命名 |
| /var/log/cron | 定时任务的执行日志 |
示例
shell
// 1. 查看当前用户的定时任务
$ crontab -l
// 2. 为当前用户编辑一个定时任务
$ crontab -e
// 3. 清空当前用户的定时任务
$ crontab -r
// 4. 每分钟打印一次自己的英文名字到 /home/test/name.txt 的文件中
方式一:
$ mkdir /home/test // 创建文件目录
$ crontab -e // 输入以下内容
# print my name
* * * * * echo "zeanzai" >> /home/test/name.txt
$ cat /home/test/name.txt // 查看输出
zeanzai
方式二:
$ mkdir /home/test // 创建文件目录
$ vi /var/spool/cron/root // 编辑定时任务配置文件,输入以下内容
# print my name
* * * * * echo "zeanzai" >> /home/test/name.txt
// 5. 查看定时任务执行的日志
$ tail -f /var/log/cron
// 6. 查看定时任务的配置文件
方式一:
$ ll /var/spool/cron/
$ cat root
方式二:
$ crontab -l
// 7. 删除定时任务
$ crontab -ir
yes
// 8. 每天00:01打包昨天的日志文件到tar文件,并删除昨天的日志文件
$ mkdir /home/logs/school-hydroelectricity/tar
$ vi /etc/scripts/tar.sh
cd /home/logs/school-hydroelectricity
tar zcf ./tar/$(date +'%Y-%m-%d' -d '-1 days').tar.gz ./$(date +'%Y-%m-%d' -d '-1 days')
rm -rf ./$(date +'%Y-%m-%d' -d '-1 days')
$ ./etc/scripts/tar.sh
$ crontab -e
# 每天00:01打包昨天的日志文件到tar目录中,并删除昨天的日志文件,要求打包文件以日期命名
* * * * * /bin/sh /etc/scripts/tar.sh