定时执行任务
-
Linux定时任务:contrab
-
ubuntu
判断cron服务有没有启动,命令:
ps -ef | grep cron
启动命令:sudo service cron start
关闭命令:sudo service cron stop
重启命令:sudo service cron restart
重新载入配置文件:sudo service cron reload
-
centos
ps -ef|grep crond
启动: systemctl start crond
关闭: systemctl stop crond
重启: systemctl restart crond
-
编辑crontab
命令:crontab -e
第一次编辑crontab,会让我们选择使用的编辑器,一般选择第三个vim
如果选错了,可以执行sudo select-editor 重新选择
进入编辑页面就可以添加执行的任务,如
* * * * * python3 /root/test.py &> /root/log.txt
-
查看crontab任务
命令:crontab -l
会列出当前用户添加的所有任务
-
清空crontab任务
命令:crontab -r
删除当前用户设置的所有任务
-
配置说明
-
1-10 */2 * * * python3 /etc/a.py
-
crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。
-
每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。
-
前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:
- 分钟 0 - 59
- 小时 0 - 23
- 天 1 - 31
- 月 1 - 12
- 星期 0 - 6 0表示星期天
-
除了这些固定值外,还可以配合星号(*),逗号(,),短横线(-)和斜线(/)来表示一些其他的含义:
-
星号:表示任意值,比如在小时部分填写* 代表任意小时(每小时)
-
逗号:可以允许在一个部分中填写多个值,比如在分钟部分填写1,3 表示一分钟和三分钟
-
斜线:一般配合* 使用,代表每隔多长时间,比如在小时部分填写
*/2
代表每隔两小时。所以*/1
和 * 没有区别 -
短横线:表示范围,比如在分钟部分填写1-10 代表从第一分钟到第十分钟
-
-
-
例子:
#每天早上7点 0 7 * * * #在12 月内, 每天的早上6 点到12 点中,每隔3个小时执行一次 0 6-12/3 * 12 * #周一到周五每天下午5:00 0 17 * * 1-5 #每月每天的午夜0 点20 分, 2 点20 分, 4 点20 分... 20 0-23/2 * * * #每小时的第10和第15分钟 10,15 * * * * # 每分钟执行一次 * * * * * # 每周1的凌晨1点 0 1 * * 1
-
centos的计划任务
-
查看系统的计划任务有没有开启: 命令
ps -ef|grep crond
-
如果没有开启,执行
systemctl start crond
-
把 脚本 添加到 计划任务中, 命令
crontab -e
, 那么会打开 vim 编辑器进行编辑-
比如 每一分钟 执行 一次 脚本, 代码如下
* * * * * python3 /root/demo.py &> /root/log.txt # 注意: 执行的脚本 必须写 绝对 路径 # 重定向 错误的 脚本 也必须 写 绝对路径
-
-
终止这个脚本执行的方式
- 如果终止所有脚本执行, 执行命令:
crontab -r
- 如果只想 终止这一个 脚本 , 那么 就 通过
crontab -e
,进入到 vim 编辑器, 把这一行 定时 任务删除,保存即可
- 如果终止所有脚本执行, 执行命令:
-
查看 有哪些 定时任务, 命令
crontab -l
-
注意: 定时任务的规则,默认的最小单位是 每分钟, 如果 是 小于 每分钟执行, 只能去通过 改变代码实现,一般的做法是 写循环,并且的循环中 sleep . 比如 每秒执行一次,代码是
import time for i in range(60): .... time.sleep(1)