跳转到内容

定时任务

查看服务相关信息

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

make it come true