Linux 定时任务之crontab使用

作者:叶孤心丶
转载 链接:https://blog.csdn.net/yeguxin/article/details/79543514
有时候需要让系统定时执行一些比较简单的函数,那么就可以借用linux自带的crontab即可实现。

1.crontab简介

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

2.确定服务器是否开启定时任务计划服务
[root@docker /]# service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-04-21 04:21:05 EDT; 3min 9s ago
 Main PID: 22089 (crond)
    Tasks: 1
   Memory: 688.0K
   CGroup: /system.slice/crond.service
           └─22089 /usr/sbin/crond -n

Apr 21 04:21:05 docker systemd[1]: Started Command Scheduler.
Apr 21 04:21:05 docker crond[22089]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 31% if used.)
Apr 21 04:21:06 docker crond[22089]: (CRON) INFO (running with inotify support)
Apr 21 04:21:06 docker crond[22089]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Apr 21 04:24:01 docker crond[22089]: (root) RELOAD (/var/spool/cron/root)

命令: service crond start 开启服务
命令: service crond stop 关闭服务
命令: service crond restart 重启服务
命令: service crond reload 重新载入配置

3.crontab格式说明

格式为 : * * * * *
示例:
*/1 * * * * Command 每f分钟执行
0 */1 * * * Command 每小时执行
5 * * * * Command 每小时的第5分钟执行一次命令
30 18 * * * Command 指定每天下午的 6:30 执行一次命令
30 7 8 * * Command 指定每月8号的7:30分执行一次命令
30 5 8 6 * Command 指定每年的6月8日5:30执行一次命令
30 6 * * 0 Command 指定每星期日的6:30执行一次命令
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * Command

4.实例
crontab -e  编辑某个用户的cron服务
crontab -l 列出某个用户cron服务的详细内容

实际需求:test.py文件里有两个函数 A和B,linux定时任务想分别执行这个py文件中的a和b函数,每小时执行a函数,每天10点执行b函数。
那么我们可以把a,b函数分别置于两个不同的sh文件放入定时任务即可。
test.py:

import os
from datetime import datetime
def a():
    with open('a.txt', 'a') as f:
        f.write(datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'\n')
    f.close()

def b():
    with open('b.txt', 'a') as f:
        f.write(datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'\n')
    f.close()

a.sh:

#!/usr/bin/bash
cd  /home # 用于切换至指定路径
python -c 'import test;test.a()'

b.sh:

#!/usr/bin/bash
cd  /home # 用于切换至指定路径
python -c 'import test;test.b()'

开始配置定时任务:

[root@docker home]# crontab -e

0 */1 * * * /bin/sh /home/a.sh # 每小时执行
0 10 * * * /bin/sh /home/b.sh # 每天十点执行

填写好保存退出(:wq),接着就是重启定时任务:

service crond restart
主要它的用法也非常简单,给人一看就明白的感觉,下面是它的标准格式:
minute   hour   day   month   week   command     顺序:分 时 日 月 周

其中:

  • minute:表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

简单说明一下crontab,它是linux系统的定时任务命令,与windows系统下的计划任务有点类似,我们的使用方法也很简单,首先使用你当前的用户创建一个crontab文件,使用crontab -e命令创建一个文件,这个文件在这个目录下:

/var/spool/cron

使用 cd /var/spool/cron就可以切换到该目录下,文件名是以当前用户名命名的,比如你当前是root权限账户,那你创建的文件可能就是root,如果你是test用户,那么文件名就是test,切记,所有用户定义的crontab文件都被保存在/var/spool/cron目录中,之后编辑该文件,使用vim root或vim test编辑文件。下面给大家看实例:

每分钟执行一次command

* * * * * command

每小时的第3和第15分钟执行

3,15 * * * * command

在上午的8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

在每天的23点30分执行备份文件脚本,并同时输出执行错误日志到log文件

30 23 * * * python /home/***/***/test.py >> /home/***/***/test.log 2>&1

每个星期一的上午8点15分执行

15 8 * * 1 command

注意设置时间要大于当前时间1分钟才可能看到效果,不然你本地时间如果和linux系统时间不一致就可能会看不到效果

附加

crontab设置定时执行需要进入虚拟环境执行程序shell脚本:

#!/bin/sh

export PATH=$PATH:/usr/local/bin
echo -n "开始采集代理 "
source /home/www/XXX/venv/bin/activate
python /home/www/XXXX/app/XXXX.py >> /home/www/XXX/XXX.log
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值