LinuxLinux

4-13 Linux中的计划作业 --- crontab(一、c

2021-10-18  本文已影响0人  捌千里路雲和月

1、 cron:是一个线程,它可以让 linux 周期性的执行某一命令。

2、linux 指定计划任务有两种方式。一种是通过 crontab 命令、另一种是通过 /etc/crontab 配置文件。下面先操作 crontab 命令,后操作 /etc/crontab 文件。

3、 crontab:是一个命令,可以设置 linux 周期性执行某一命令。
crontab 参数选项:
-u:设置某一用户的周期性工作(只有 root 权限可以设置)。
-e:编辑 crontab 的工作内容。
-l:查阅 crontab 的工作内容。
-r:移除 crontab 的所有工作内容,如需移除单项或非全部,可用 -e 编辑。

4、 crontab 的格式概括:

特殊符号(* 星号、,逗号,- 减号,/ 斜杠),特定的符号可以组合参数的格式、表示范围 和 时间周期。符号格式是表达式的一种,5 个 * 号对标参数格式图解如下:


符号区间对标的参数图解

5、特殊符号解析:


6、crontab 命令案例实操:

用户界面
[root@localhost ~]# crontab -eu torres    ## 对 torres 用户制定计划
no crontab for torres - using an empty one

* * * * * date >> mydate.txt    ## 每分钟输出 date 到 mydate.txt 文件                                                                           
~                                                                                      
~                                                                                      
~                                                                                      
:wq

torres 用户查看自身运行的 crontab 计划任务 torres 用户下的 mydate.txt 文件及内容
## root 修改普通用户的 crontab
[root@localhost ~]# 
[root@localhost ~]# crontab -lu torres    ## root 通过 -lu 查看 torres 用户的 crontab
* * * * * date >> mydate.txt
[root@localhost ~]# 
[root@localhost ~]# crontab -eu torres    root 通过 -eu 编辑 torres 用户的 crontab

* * * * * date >> mydate.txt
## 新增一条每 2 分钟输出 i am root 到 root_echo.txt
*/2 * * * * echo "i am root" >> root_echo.txt                                                                                         
~                                                                                                 
~                                                                                                 
~                                                                                                 
:wq    ## 保存并退出

crontab: installing new crontab    ## 完成对 torres 的 crontab 设置 
[root@localhost ~]# 
[root@localhost ~]# crontab -lu torres    ## 现在 torres 用户的 crontab 有两条
* * * * * date >> mydate.txt
*/2 * * * * echo "i am root" >> root_echo.txt
[root@localhost ~]# 

[torres@localhost ~]$ 
[torres@localhost ~]$ ll
total 8
-rw-r--r--. 1 torres torres 812 Sep 28 21:45 mydate.txt
-rw-r--r--. 1 torres torres  50 Sep 28 21:44 root_echo.txt
[torres@localhost ~]$ 
[torres@localhost ~]$ cat root_echo.txt    ## 查看 root_echo.txt 文件内容
i am root
i am root
i am root
i am root
i am root
[torres@localhost ~]$ 

[torres@localhost ~]$ 
[torres@localhost ~]$ crontab -e    ## torres 编辑自身运行的 crontab 只需 -e 

* * * * * date >> mydate.txt
*/2 * * * * echo "i am root" >> root_echo.txt
## 新增一条每 2 分钟输出 i am torres 到 torres_echo.txt
*/2 * * * * echo "i am torres" >> torres_echo.txt                                                                                                                
~                                                                                                                       
~                                                                                                                       
~                                                                                                                       
:wq    ## 保存并退出

crontab: installing new crontab
[torres@localhost ~]$ 
[torres@localhost ~]$ ll
total 12
-rw-r--r--. 1 torres torres 1131 Sep 28 21:56 mydate.txt
-rw-r--r--. 1 torres torres  110 Sep 28 21:56 root_echo.txt
-rw-r--r--. 1 torres torres   36 Sep 28 21:56 torres_echo.txt
[torres@localhost ~]$ 
[torres@localhost ~]$ cat torres_echo.txt     ## 查看 torres_echo.txt 文件内容 
i am torres
i am torres
i am torres
[torres@localhost ~]$ 

[root@localhost ~]# 
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
torres:x:1000:1007::/home/torres:/bin/bash      ## <------------普通用户        
user1:x:1001:1008::/home/user1:/bin/bash       ## <------------普通用户
x:x:1002:1009::/home/x:/bin/bash       ## <------------普通用户
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
[root@localhost ~]# 

[torres@localhost ~]$ 
[torres@localhost ~]$ crontab -eu user1
must be privileged to use -u    ## 必须有使用-u的特权
[torres@localhost ~]$ 


## 当前用户创建 crontab 任务,-e 编辑模式,vim 界面。
[root@localhost ~]# crontab -e

## 按 I 进入插入模式进行编辑
## 输入指令,五个 * 代表每 1分钟执行一次指令。                                        
* * * * * date  >> date.txt         
~                                                                                                             
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## wq 保存退出

[root@localhost ~]# 
[root@localhost ~]# ll    ## 此时,ll 查看当前目录已经有 date.txt 文件了,大小为 58 字节
total 4
-rw-r--r--. 1 root root 58 Sep 26 00:08 date.txt
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# date    ## 再过了一会,查看当前时间。
Sun Sep 26 00:11:54 CST 2021
[root@localhost ~]# 
[root@localhost ~]# ll    ## 此时,date.txt 文件大小为 145 字节
total 4
-rw-r--r--. 1 root root 145 Sep 26 00:11 date.txt
drwxr-xr-x. 4 root root  36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# cat date.txt    ## cat 查看 date.txt 目录的内容。从输出的时间看出是每 1 分钟输出一次     
Sun Sep 26 00:07:01 CST 2021
Sun Sep 26 00:08:01 CST 2021
Sun Sep 26 00:09:01 CST 2021
Sun Sep 26 00:10:01 CST 2021
Sun Sep 26 00:11:02 CST 2021
[root@localhost ~]# 
[root@localhost ~]# crontab -l    ## -l 列出当前 crontab 的任务内容
* * * * * date  >> date.txt  
[root@localhost ~]# 
[root@localhost ~]# crontab -r    ## -r 删除当前 crontab 的任务内容
[root@localhost ~]# 
[root@localhost ~]# crontab -l    ## 当 -r 删除了任务内容后,再用 -l 列出内容,会提示 root 用户没有 crontab 任务了。
no crontab for root
[root@localhost ~]# 


## 当前用户创建 crontab 任务,-e 编辑模式,vim 界面。
[root@localhost ~]# crontab -e    
no crontab for root - using an empty one

## 按 I 进入插入模式进行编辑
## 输入指令,*/5 * * * *代表每 5 分钟执行一次指令。                                         
*/5 * * * * date >> /tmp/5minute-date.txt                                                 
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq     ## wq 保存退出

[root@localhost ~]# 
[root@localhost ~]# ll /tmp/    ## 已经有 5minute-date.txt , 最后修改时间 00:50,大小 87 字节
total 8
-rw-r--r--. 1 root root  87 Sep 26 00:50 5minute-date.txt    ## crontab 产生的文件

[root@localhost ~]# 
[root@localhost ~]# cat /tmp/5minute-date.txt    ## cat 查看文件内容 
Sun Sep 26 00:40:01 CST 2021
Sun Sep 26 00:45:01 CST 2021
Sun Sep 26 00:50:01 CST 2021
[root@localhost ~]# 
[root@localhost ~]# crontab -r    ## 删除当前用户(root)所有的 crontab 任务
[root@localhost ~]# 
[root@localhost ~]# crontab -l    ## 当前用户(root)没有 crontab 任务
no crontab for root
[root@localhost ~]# 


[root@localhost ~]# pwd    ## 由于是在当前目录下创建脚本文件,所以养成习惯查看一下当前路径
/root
[root@localhost ~]# 
[root@localhost ~]# vim mydate.sh    ## vim 编辑脚本文件,名为 mydate.sh
##  脚本的编写是执行的内容
date >> /tmp/2minute.txt    ## 内容是 date 输出时间到 /tmp/2minute.txt 文件                                                                      
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出

[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 174 Sep 26 00:12 date.txt
-rw-r--r--. 1 root root  25 Sep 26 01:52 mydate.sh    ## 脚本文件
drwxr-xr-x. 4 root root  36 Sep 19 10:31 test
[root@localhost ~]# chmod u+x mydate.sh    ## 赋予脚本文件拥有者具有 x 执行权限 
[root@localhost ~]# 
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 174 Sep 26 00:12 date.txt
-rwxr--r--. 1 root root  25 Sep 26 01:52 mydate.sh    ## 赋有 x 执行权限的脚本文件
drwxr-xr-x. 4 root root  36 Sep 19 10:31 test

[root@localhost ~]# crontab -e    ## 当前用户创建 crontab 任务
no crontab for root - using an empty one

*/2 * * * * /root/mydate.sh    ## crontab 任务的编写是控制时间 和 对象                                                                               
~                                                                                                             
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出

[root@localhost ~]# 
[root@localhost ~]# date    ## 查看当前时间,距离执行计划作业已有一段时间
Sun Sep 26 02:03:59 CST 2021
[root@localhost ~]# 
[root@localhost ~]# ll /tmp/    ## 查看 tmp 目录,已有 2minute.txt 的文件,116 字节,最后修改时间 02:04
total 8
-rw-r--r--. 1 root root 116 Sep 26 02:04 2minute.txt
[root@localhost ~]# 
[root@localhost ~]# cat /tmp/2minute.txt    ## 查看  2minute.txt 文件,已有记录
Sun Sep 26 01:58:01 CST 2021
Sun Sep 26 02:00:01 CST 2021
Sun Sep 26 02:02:01 CST 2021
Sun Sep 26 02:04:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# crontab -e
no crontab for root - using an empty one

/3 * * * * date >> 3minute.txt    ## 当 /3 前没有 * 号时,保存文档                                                                                                                                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

crontab: installing new crontab
"/tmp/crontab.vzxojY":1: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit?    ## 系统会提示出错,并问是否进行修改 

Do you want to retry the same edit? y    ## 输入 y,进行修改。n 退出 crontab 编辑

*/3 * * * * date >> 3minute.txt    ## 输入 y,/3 前加上 * 号可正常保存退出                                                              
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

crontab: installing new crontab    ## 新的 crontab 计划创建成功
[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待一段时间,已经有 3minute.txt 的文档,大小 87 字节,最后修改时间 08:51
total 4
-rw-r--r--. 1 root root 87 Sep 26 08:51 3minute.txt
drwxr-xr-x. 4 root root 36 Sep 11 08:53 test
[root@localhost ~]# 
[root@localhost ~]# cat 3minute.txt    ## 列出 3minute.txt 文件内容,已有数据
Sun Sep 26 08:45:01 CST 2021
Sun Sep 26 08:48:01 CST 2021
Sun Sep 26 08:51:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# crontab -e    ## 创建 crontab 计划作业
no crontab for root - using an empty one

*/2 * * * date >> 2minute.txt    ## 内容输少一个 * 号                                                                                                  
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

"/tmp/crontab.eYnQoX":1: bad day-of-week
errors in crontab file, can't install.
Do you want to retry the same edit?    ## 格式错误,系统会提示出错,并问是否进行修改  

Do you want to retry the same edit? n    ## 当输入 n 的时候,退出 crontab 编辑 
crontab: edits left in /tmp/crontab.eYnQoX
[root@localhost ~]# 
[root@localhost ~]# crontab -l    ## 查询当前的 crontab 也是没有任务
no crontab for root
[root@localhost ~]# 

Do you want to retry the same edit? y    ## 输入 y,则进入原来的编辑基础进行修改

*/2 * * * * date >> 2minute.txt    ## 加上 1 个 * 号                                                                                    
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

crontab: installing new crontab    ## crontab 创建成功
[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待一段时间,已经有 2minute.txt 这个文件,大小 87 字节,最后修改时间 09:02
total 4
-rw-r--r--. 1 root root 87 Sep 26 09:02 2minute.txt
drwxr-xr-x. 4 root root 36 Sep 11 08:53 test
[root@localhost ~]# 
[root@localhost ~]# cat 2minute.txt    ## 查看文件内容 
Sun Sep 26 08:58:01 CST 2021
Sun Sep 26 09:00:01 CST 2021
Sun Sep 26 09:02:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# vim mydate.sh    ## 当前目录下创建 mydate.sh 脚本  

date >> 2minute.txt    ## 内容:输出 date 到  2minute.txt 文件                                                                                                     
~                                                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出


[root@localhost ~]# 
[root@localhost ~]# chmod u+x mydate.sh    ## 赋予 x 执行权限 
[root@localhost ~]# ll
total 4
-rwxr--r--. 1 root root 20 Sep 26 09:09 mydate.sh    ## 已有 x 权限的脚本
drwxr-xr-x. 4 root root 36 Sep 11 08:53 test
[root@localhost ~]# 

[root@localhost ~]# pwd    ## 查看当前路径
/root      

[root@localhost ~]# crontab -e    ## 创建 crontab 计划作业
no crontab for root - using an empty one

/2 * * /root/mydate.sh    ## 输入错误的格式,/2 前没有 * 号,而且后面也缺少两个 * 号                                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出
 
"/tmp/crontab.OAqHeq":1: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit?     ## 提示错误,是否进行修改

Do you want to retry the same edit? y    ## 输入 y 进行修改

*/2 * * * *  /root/mydate.sh    ## 输入正确的格式                                                                                         
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出
                
crontab: installing new crontab    ## crontab创建成功
[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待一段时间查看目录
total 8
-rw-r--r--. 1 root root 116 Sep 26 09:42 2minute.txt    ## 已有 2minute.txt 文件,大小 116 字节,最后修改时间 09:42
-rwxr--r--. 1 root root  20 Sep 26 09:09 mydate.sh
drwxr-xr-x. 4 root root  36 Sep 11 08:53 test
[root@localhost ~]# cat 2minute.txt    ## 查看  cat 2minute.txt 内容
Sun Sep 26 09:36:02 CST 2021
Sun Sep 26 09:38:01 CST 2021
Sun Sep 26 09:40:01 CST 2021
Sun Sep 26 09:42:01 CST 2021
[root@localhost ~]# 

6)、指定时间输出 date 。
例:每小时的 0分钟(整点),15分钟、30分钟、45分钟 输出 date 时间到当前目录 date.txt 文件,如果没有 date.txt 文件则会自动创建一个。指定时间的输出,不要分钟区间的 * 号,直接写上时间。单个时间参数直接取代 * 号的位置,多个时间参数用 ,逗号隔开。

[root@localhost ~]# crontab -e    ## 创建 crontab 计划作业
no crontab for root - using an empty one

0,15,30,45 * * * * date >> date.txt    ## 多个时间参数写到分钟的区间,用逗号隔开。不用写 * 号                                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

[root@localhost ~]# ll    ## 等待一段时间,已经有 date.txt 文件,大小 290 字节,最后修改时间 12:30 分
total 4
-rw-r--r--. 1 root root 290 Sep 26 12:30 date.txt
drwxr-xr-x. 4 root root  36 Sep 11 08:53 test
[root@localhost ~]# 
[root@localhost ~]# cat date.txt    ## 列出 date.txt 文件内容
Sun Sep 26 10:15:01 CST 2021
Sun Sep 26 10:30:01 CST 2021
Sun Sep 26 10:45:01 CST 2021
Sun Sep 26 11:00:01 CST 2021
Sun Sep 26 11:15:01 CST 2021
Sun Sep 26 11:30:01 CST 2021
Sun Sep 26 11:45:01 CST 2021
Sun Sep 26 12:00:01 CST 2021
Sun Sep 26 12:15:01 CST 2021
Sun Sep 26 12:30:01 CST 2021
[root@localhost ~]# 


[root@localhost ~]# vim output_date.sh    ## 当前目录下编辑 output_date.sh 脚本

date >> date.txt    ## 内容:输入出 date 到 date.txt 文件                                                                                          
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出    

[root@localhost ~]# 
[root@localhost ~]# chmod u+x output_date.sh    ##  赋予 output_date.sh 脚本 x 可执行权限
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rwxr--r--. 1 root root 17 Sep 26 12:41 output_date.sh    ## output_date.sh 已有 x 可执行权限
drwxr-xr-x. 4 root root 36 Sep 11 08:53 test               
[root@localhost ~]# 
[root@localhost ~]# crontab -e    ## 创建 crontab 计划作业

0,10,20,30,40,50 * * * *  /root/output_date.sh    ## 内容:每小时的0分,10分,20分,30分,40分,50分 调用 output_date.sh 脚本                                                                                                                                                                                                                                                                                        
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待一段时间,已有 date.txt 文件,大小 145 字节,最后修改时间 13:30
total 8
-rw-r--r--. 1 root root 145 Sep 26 13:30 date.txt
-rwxr--r--. 1 root root  17 Sep 26 12:41 output_date.sh
drwxr-xr-x. 4 root root  36 Sep 11 08:53 test
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# cat date.txt    ## 查看  date.txt 文件内容
Sun Sep 26 12:50:01 CST 2021
Sun Sep 26 13:00:01 CST 2021
Sun Sep 26 13:10:01 CST 2021
Sun Sep 26 13:20:01 CST 2021
Sun Sep 26 13:30:01 CST 2021
[root@localhost ~]# 

7)、例:每天晚上 22:23、22:24、22:25 输出 date 到 mydate.txt 文件。

[root@localhost ~]# crontab -e    ## 创建 crontab 计划作业

23 22 * * * date >> mydate.txt    ## 22:23分输出 date 到 mydate.txt 文件
24 22 * * * date >> mydate.txt    ## 22:24分输出 date 到 mydate.txt 文件
25 22 * * * date >> mydate.txt    ## 22:25分输出 date 到 mydate.txt 文件                                                                                              
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出

crontab: installing new crontab    ## crontab 创建成功
[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待 22:25分后查看当前目录,就会有 mydate.txt 文件生成
total 4
-rw-r--r--. 1 root root 87 Sep 26 22:25 mydate.txt    ## 生成的 mydate.txt 文件
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看文件内容,就是 crontab 输出的 date
Sun Sep 26 22:23:01 CST 2021
Sun Sep 26 22:24:01 CST 2021
Sun Sep 26 22:25:01 CST 2021
[root@localhost ~]# 


[root@localhost ~]# vim date.sh    ## 编辑 date.sh 脚本文件

date >> mydate.txt    ## 脚本只记录执行内容,date 输出到  mydate.txt 文件                                                                                
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出                                  

[root@localhost ~]# 
[root@localhost ~]# chmod u+x date.sh    ## 赋予脚本文件的拥有者 x 执行权限 
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rwxr--r--. 1 root root 93 Sep 26 22:35 date.sh    ## 拥有者有 x 执行权限
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# crontab -e    ## 创建 crontab 计划

40 22 * * * /root/date.sh    ## 22:40 分调用 /root/date.sh 脚本
42 22 * * * /root/date.sh    ## 22:42 分调用 /root/date.sh 脚本
44 22 * * * /root/date.sh    ## 22:44 分调用 /root/date.sh 脚本                                                                                                                                                                                                          
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出   
 
crontab: installing new crontab    ## crontab 计划创建成功
[root@localhost ~]# 
[root@localhost ~]# ll    ## 等待执行时间过去后查看目录内容,已有 mydate.txt 文件
total 8
-rwxr--r--. 1 root root 19 Sep 26 22:38 date.sh      ## 脚本    
-rw-r--r--. 1 root root 87 Sep 26 22:44 mydate.txt    ## 脚本输出的文件
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt   ## 查看文件内容 
Sun Sep 26 22:40:01 CST 2021
Sun Sep 26 22:42:01 CST 2021
Sun Sep 26 22:44:01 CST 2021
[root@localhost ~]# 
         

8)、例:每天 1 点到 3 点的第 10 分钟 和第 50 分钟把 date 输出到 1-3date.txt 文件。

[root@localhost ~]# crontab -e    ## 创建 crontab 计划

## 1点 到 3 点的 10 分、50 分执行 date 输出到 1-3date.txt 文件
10,50 1-3 * * * date >> 1-3date.txt                                                                                              
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并推出

crontab: installing new crontab
[root@localhost ~]#
[root@localhost ~]# vim 4-6date.sh    ## 编辑脚本并保存为 4-6date.sh

date >> 4-6date.txt    ## 脚本内容:date 输出到 4-6date.txt 文件                                                                                                       
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出 

[root@localhost ~]# 
[root@localhost ~]# chmod u+x 4-6date.sh    ## 赋予脚本拥有者 x 执行权限 
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rwxr--r--. 1 root root 20 Sep 27 00:55 4-6date.sh    ## 拥有者 x 权限
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# crontab -e    ## 编辑 crontab 计划
## 一个用户可拥有多个计划作业
10,50 1-3 * * * date >> 1-3date.txt
20,40 4-6 * * * /root/4-6date.sh    ## 每天 4 点到 6 点的第 20 分钟 和第 40 分钟调用脚本                                                                                     
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出

[root@localhost ~]# ll    ## 等待执行时间过去后查看目录内容,已有 1-3date.txt、 4-6date.txt 文件
total 12
-rw-r--r--. 1 root root 174 Sep 27 03:50 1-3date.txt    ## 1点-3点 date 输出的文件
-rwxr--r--. 1 root root  20 Sep 27 00:55 4-6date.sh    ## 脚本
-rw-r--r--. 1 root root 174 Sep 27 06:40 4-6date.txt    ## 4点-6点 date 输出的文件
drwxr-xr-x. 4 root root  36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# cat 1-3date.txt    ## 查看 1-3date.txt 内容
Mon Sep 27 01:10:01 CST 2021
Mon Sep 27 01:50:01 CST 2021
Mon Sep 27 02:10:01 CST 2021
Mon Sep 27 02:50:01 CST 2021
Mon Sep 27 03:10:01 CST 2021
Mon Sep 27 03:50:01 CST 2021
[root@localhost ~]# cat 4-6date.txt    ## 查看 4-6date.txt 内容 
Mon Sep 27 04:20:01 CST 2021
Mon Sep 27 04:40:01 CST 2021
Mon Sep 27 05:20:01 CST 2021
Mon Sep 27 05:40:01 CST 2021
Mon Sep 27 06:20:01 CST 2021
Mon Sep 27 06:40:01 CST 2021
[root@localhost ~]# 
            

9)、例:每逢周 六、日的 1:00 输出 date 到 mydate.txt。

[root@localhost ~]# crontab -e    ## 创建 crontab 计划

0 1 * * 6,7  date >> mydate.txt     ## 每逢周六、日的 1:00 输出 date 到 mydate.txt                                                                                        
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

crontab: installing new crontab    ## crontab 创建成功
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-25 0:59:00"    ## 更改时间为周六 0:59
Sat Sep 25 00:59:00 CST 2021    ## 更改的时间 
[root@localhost ~]# 
[root@localhost ~]# date    ## 等待一会,查看时间
Sat Sep 25 01:00:22 CST 2021    ## 已过 crontab 设定的 1点整执行时间
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Sep 25 01:00 mydate.txt    ## 已产生 mydate.txt 文件
drwxr-xr-x. 4 root root 36 Sep 11 08:53 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看文件内容,符合 crontab 设置的条件,周六晚 1 点整输出
Sat Sep 25 01:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# date -s "2021-9-26 0:59:00"    ## 更改时间为周日 0:59
Sun Sep 26 00:59:00 CST 2021    ## 更改后的时间
[root@localhost ~]# 
[root@localhost ~]# date
Sun Sep 26 01:01:09 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 周日同样符合要求的输出结果 
Sat Sep 25 01:00:01 CST 2021
Sun Sep 26 01:00:02 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-27 0:59:00"    ## 更改时间为周一 0:59
Mon Sep 27 00:59:00 CST 2021    ## 更改后的时间
[root@localhost ~]# 
[root@localhost ~]# date
Mon Sep 27 01:00:24 CST 2021    ## 已过预设的执行时间
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 由于周一不符合 crontab 预设的要求,所以没有输出 date 
Sat Sep 25 01:00:01 CST 2021
Sun Sep 26 01:00:02 CST 2021
[root@localhost ~]# 

[root@localhost ~]# date -s "2021-9-28 0:59:00"    ## 更改时间为周二 0:59
Tue Sep 28 00:59:00 CST 2021    ## 更改后的时间    
[root@localhost ~]# 
[root@localhost ~]# date     ## 已过预设的执行时间
Tue Sep 28 01:00:31 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt     ## 由于周二不符合 crontab 预设的要求,所以没有输出 date  
Sat Sep 25 01:00:01 CST 2021
Sun Sep 26 01:00:02 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-10-2 0:59:00"    ## 更改时间为10月2号 周六 0:59
Sat Oct  2 00:59:00 CST 2021     ## 更改后的时间      
[root@localhost ~]# 
[root@localhost ~]# date    ## 已过预设的执行时间
Sat Oct  2 01:00:39 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt     ## 周六符合 crontab 预设要求,所以有 date 输出
Sat Sep 25 01:00:01 CST 2021
Sun Sep 26 01:00:02 CST 2021
Sat Oct  2 01:00:02 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-10-3 0:59:00"     ## 更改时间为10月3号 周日 0:59
Sun Oct  3 00:59:00 CST 2021     ## 更改后的时间  
[root@localhost ~]# 
[root@localhost ~]# date    ## 已过预设的执行时间
Sun Oct  3 01:00:14 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 周日符合 crontab 预设要求,所以有 date 输出 
Sat Sep 25 01:00:01 CST 2021
Sun Sep 26 01:00:02 CST 2021
Sat Oct  2 01:00:02 CST 2021
Sun Oct  3 01:00:01 CST 2021
[root@localhost ~]# 

10)、例:每周日的 00:00 输出 date 到 mydate.txt。

[root@localhost ~]# crontab -e     ## 创建 crontab 计划

0 0 * * 7  date >> mydate.txt    ## 周日的 00:00 输出 date 到 mydate.txt                                                                                                                                                                                            
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq

crontab: installing new crontab
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-4 23:59:00"  ## 更改时间,9月4日周六 23:59分
Sat Sep  4 23:59:00 CST 2021    ## 已更改的时间
[root@localhost ~]# 
[root@localhost ~]# date
Sun Sep  5 00:00:24 CST 2021    ## 0 点后是周日,执行 crontab 的时间
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Sep  5 00:00 mydate.txt    ## 已生成 mydate.txt 文件
drwxr-xr-x. 4 root root 36 Sep 11  2021 test
[root@localhost ~]# cat mydate.txt    ## 查看文件内容,已有 5 号周日输出的 date 记录     
Sun Sep  5 00:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-11 23:59:00"    ## 再把时间更改到 9 月 11 号 周六 23:59
Sat Sep 11 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Sun Sep 12 00:00:08 CST 2021     ## 0 点后是周日,执行 crontab 的时间
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看文件内容,已新增 12 号周日输出的 date 记录     
Sun Sep  5 00:00:01 CST 2021
Sun Sep 12 00:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-18 23:59:00"    ## 再把时间更改到 9 月 18 号 周六 23:59
Sat Sep 18 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date    ## 0 点后是周日,执行 crontab 的时间
Sun Sep 19 00:00:58 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看文件内容,已新增 19 号周日输出的 date 记录      
Sun Sep  5 00:00:01 CST 2021
Sun Sep 12 00:00:01 CST 2021
Sun Sep 19 00:00:01 CST 2021
[root@localhost ~]# 

## -------- 已下是更改一些非周日的时间。
## -------- 通过测试 ,非周日即使过了 0 点,也不会输出 date 到 mydate.txt 文件
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-22 23:59:00"    ## 把时间更改到 9 月 22 号 周三 23:59
Wed Sep 22 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Thu Sep 23 00:00:54 CST 2021    ## 9月23日 0点,周四不符合 crontab 预设要求,所以不会输出 date
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt 
Sun Sep  5 00:00:01 CST 2021
Sun Sep 12 00:00:01 CST 2021
Sun Sep 19 00:00:01 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-27 23:59:00"    把时间更改到 9 月 27 号 周一 23:59
Mon Sep 27 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Tue Sep 28 00:00:48 CST 2021     ## 9月28日 0点,周二不符合 crontab 预设要求,所以不会输出 date
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt 
Sun Sep  5 00:00:01 CST 2021
Sun Sep 12 00:00:01 CST 2021
Sun Sep 19 00:00:01 CST 2021
[root@localhost ~]# 

11)、例:每月的 1号、10号、20号、30号的 3 点 输出 date 到 mydate.txt。

[root@localhost ~]# crontab -e    ## 编辑 crontab 计划

0 3 1,10,20,30 * * date >> mydate.txt    ## 每月的 1号、10号、20号、30号的 3 点 输出 date 到 mydate.txt                                                                      
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq

crontab: installing new crontab
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-1 2:59:00"    ## 把时间更改到 9 月 1 号 周三 2:59
Wed Sep  1 02:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date    
Wed Sep  1 03:00:31 CST 2021
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Sep  1 03:00 mydate.txt    ## 3点整,生成 mydate.txt 文件
drwxr-xr-x. 4 root root 36 Sep 11  2021 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看文件内容 
Wed Sep  1 03:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-10 2:59:00"    ## 把时间更改到 9 月 10 号 周五 2:59
Fri Sep 10 02:59:00 CST 2021
[root@localhost ~]# date
Fri Sep 10 03:03:39 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 3点整生成第二条数据 
Wed Sep  1 03:00:01 CST 2021
Fri Sep 10 03:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-20 2:59:00"    ## 把时间更改到 9 月 20 号 周一 2:59
Mon Sep 20 02:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Mon Sep 20 03:00:21 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 3点整生成第三条数据     
Wed Sep  1 03:00:01 CST 2021
Fri Sep 10 03:00:01 CST 2021
Mon Sep 20 03:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-30 2:59:00"     ## 把时间更改到 9 月 30 号 周四 2:59
Thu Sep 30 02:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Thu Sep 30 03:00:31 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 3点整生成第三条数据 
Wed Sep  1 03:00:01 CST 2021
Fri Sep 10 03:00:01 CST 2021
Mon Sep 20 03:00:01 CST 2021
Thu Sep 30 03:00:01 CST 2021
[root@localhost ~]# 

## -------- 已下是更改一些非1号、10号、20号、30号的时间。
## -------- 通过测试 ,非1号、10号、20号、30号即使过了 3 点,也不会输出 date 到 mydate.txt 文件
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-13 2:59:00"    ## 时间设置为 9月13日 2:59:00 
Mon Sep 13 02:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Mon Sep 13 03:00:08 CST 2021    ## 过了预设的时间 3 点
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 由于不是预设的 1号、10号、20号、30号,所以没有 date 输出
Wed Sep  1 03:00:01 CST 2021
Fri Sep 10 03:00:01 CST 2021
Mon Sep 20 03:00:01 CST 2021
Thu Sep 30 03:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-28 2:59:00"     ## 时间设置为 9月28日 2:59:00 
Tue Sep 28 02:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Tue Sep 28 03:00:55 CST 2021    ## 过了预设的时间 3 点
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt     ## 由于不是预设的 1号、10号、20号、30号,所以没有 date 输出
Wed Sep  1 03:00:01 CST 2021 
Wed Sep  1 03:00:01 CST 2021
Fri Sep 10 03:00:01 CST 2021
Mon Sep 20 03:00:01 CST 2021
Thu Sep 30 03:00:01 CST 2021
[root@localhost ~]# 

12)、例:3月、6月、9月、12月的第 30 日 00:00 输出 date 到 mydate.txt 文件。

[root@localhost ~]# crontab -e     ## 编辑 crontab 计划

0 0 30 3,6,9,12 * date >> mydate.txt    ## 3月、6月、9月、12月的第 30 日 00:00 输出 date 到 mydate.txt 文件                                                                                            
~                                                                                                      
~                                                                                                      
~                                                                                                      
:wq    ## 保存并退出

crontab: installing new crontab
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-3-29 23:59:00"    ## 把时间更改到 3 月 29 号 周一 23:59
Mon Mar 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date    ## 3月30日 0 点以后
Tue Mar 30 00:00:18 CST 2021
[root@localhost ~]# 
[root@localhost ~]# ll    ## 0点过去后生成 mydate.txt 文件
total 4
-rw-r--r--. 1 root root 29 Mar 30 00:00 mydate.txt
drwxr-xr-x. 4 root root 36 Sep 11  2021 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 查看 mydate.txt 文件已有 3月30 的数据 
Tue Mar 30 00:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-6-29 23:59:00"    ## 把时间更改到 6 月 29 号 周二 23:59
Tue Jun 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Wed Jun 30 00:00:30 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 0点过去后, 查看 mydate.txt 文件已新增 6月30 的数据
Tue Mar 30 00:00:01 CST 2021
Wed Jun 30 00:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-29 23:59:00"    ## 把时间更改到 9 月 29 号 周三 23:59
Wed Sep 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Thu Sep 30 00:00:48 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 0点过去后, 查看 mydate.txt 文件已新增 9月30 的数据 
Tue Mar 30 00:00:01 CST 2021
Wed Jun 30 00:00:01 CST 2021
Thu Sep 30 00:00:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-12-29 23:59:00"    ## 把时间更改到 12 月 29 号 周三 23:59
Wed Dec 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Thu Dec 30 00:01:01 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt     ## 0点过去后, 查看 mydate.txt 文件已新增 12月30 的数据  
Tue Mar 30 00:00:01 CST 2021
Wed Jun 30 00:00:01 CST 2021
Thu Sep 30 00:00:01 CST 2021
Thu Dec 30 00:00:01 CST 2021
[root@localhost ~]# 

## -------- 已下是更改一些非3月、6月、9月、12月的29号时间。
## -------- 通过测试 ,非3月、6月、9月、12月的29号时间即使过了 0 点进入30号,也不会输出 date 到 mydate.txt 文件
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-5-29 23:59:00"     ## 把时间更改到 5 月 29 号 周六 23:59
Sat May 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Sun May 30 00:02:40 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 0 点过后没有输出 5月30 的数据 
Tue Mar 30 00:00:01 CST 2021
Wed Jun 30 00:00:01 CST 2021
Thu Sep 30 00:00:01 CST 2021
Thu Dec 30 00:00:01 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date -s "2021-11-29 23:59:00"    ## 把时间更改到 11 月 29 号 周一 23:59
Mon Nov 29 23:59:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Tue Nov 30 00:00:32 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 0 点过后没有输出 11月30 的数据  
Tue Mar 30 00:00:01 CST 2021
Wed Jun 30 00:00:01 CST 2021
Thu Sep 30 00:00:01 CST 2021
Thu Dec 30 00:00:01 CST 2021
[root@localhost ~]# 

13)、每隔 1 天 2:30 输出 date 到 mydate.txt 文件。

[root@localhost ~]# crontab -e     ## 编辑 crontab 计划

30 2 */2 * * date >> mydate.txt     ## 每隔 1 天 2:30 输出 date 到 mydate.txt 文件                                                                                       
~                                                                                                             
~                                                                                                             
~                                                                                                             
:wq    ## 保存并退出

[root@localhost ~]# date -s "2:29:00"     ## 把时间更改为 2:29
Mon Sep 27 02:29:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Mon Sep 27 02:30:46 CST 2021
[root@localhost ~]# 
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Sep 27 02:30 mydate.txt    ## 2:30 生成 mydate.txt
drwxr-xr-x. 4 root root 36 Sep 19 10:31 test
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt 
Mon Sep 27 02:30:01 CST 2021    ## 27号 2:30 的数据
[root@localhost ~]# 
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-28 2:29:00"    ## 把时间改为 9月28日 2:29
Tue Sep 28 02:29:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Tue Sep 28 02:30:37 CST 2021
[root@localhost ~]# cat mydate.txt    ## 28号属于第二天,不会输出数据 
Mon Sep 27 02:30:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-29 2:29:00"    ## 把时间改为 9月29日 2:29
Wed Sep 29 02:29:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Wed Sep 29 02:30:52 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 29号属于第三天,中间隔开了 28号,所以输出 29号的数据 
Mon Sep 27 02:30:01 CST 2021
Wed Sep 29 02:30:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-9-30 2:29:00"    ## 把时间改为 9月30日 2:29
Thu Sep 30 02:29:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Thu Sep 30 02:30:58 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 29号输出了数据,30号不会输出数据 
Mon Sep 27 02:30:01 CST 2021
Wed Sep 29 02:30:01 CST 2021
[root@localhost ~]# 

[root@localhost ~]# 
[root@localhost ~]# date -s "2021-10-1 2:29:00"     ## 把时间改为 10月1日 2:29
Fri Oct  1 02:29:00 CST 2021
[root@localhost ~]# 
[root@localhost ~]# date
Fri Oct  1 02:30:25 CST 2021
[root@localhost ~]# 
[root@localhost ~]# cat mydate.txt    ## 30号没有生成数据,1号可以输出数据 
Mon Sep 27 02:30:01 CST 2021
Wed Sep 29 02:30:01 CST 2021
Fri Oct  1 02:30:01 CST 2021
[root@localhost ~]# 

上一篇下一篇

猜你喜欢

热点阅读