一文详解 Linux Crontab 调度任务
最近接到这样一个任务: 定期(每天、每月)向“特定服务器”传输“软件服务”的运营数据,因此这里涉及到一个定时任务,计划使用Python语言添加Crontab依赖写一个定时任务的脚本,实现每天、每月向服务器上传运营数据。
这篇文章是我在实现以上需求过程中,对于Crontab的使用总结。
- Crontab 概述
- Crontab 环境搭建
- Crontab 使用案例(Python)
- Crontab 使用详解
- Crontab 操作命令行(Linux)
一、Crontab 概述
在Linux环境中,Crontab是一个调度守护进程,可以按分钟、小时、每月的某天、每月、每周的某天来执行特定任务,这些特定的任务被称为 Cron 作业,基于这个特点,Crontab 经常被用于自动执行系统维护与管理。
例如:可以使用 Crontab 来自动执行一些重复性的工作,比如定期发送邮件、备份数据库、备份软件运行数据、下载最近的软件补丁等等。
Crontab 文件:
在 Linux 环境中,当我们使用Crontab命令创建cron 作业后,系统中会生成一个 Crontab 文本文件,用于指定 cron 作业的时间表:
- 在基于
Red Hat 的发行版系统,如 CentOS,crontab 该文件的存储在/var/spool/cron/目录下; - 在
Debian 、Ubuntu等系统中,该文件存储在/var/spool/cron/crontabs/目录下。
如下所示/var/spool/cron/目录下的Crontab文件:

注:
虽然我们了解到了 Crontab 的文件路径,但并不建议手动编辑该文件,官方推荐在终端使用crontab命令操作该文件。
二、Crontab 环境搭建
当然在正式介绍环境搭建之前,先向朋友们汇报一下我的虚拟机环境与使用的Python版本。
我使用的虚拟机环境为CentOS 7:

Python版本为Python 3.11.1:

- Centos 安装 cronie
- Python 安装 python-crontab 依赖
2.1 Centos 安装 cronie
在Linux中使用Crontab之前,需要先确保安装了Crontab,安装命令如下:
# Centos 安装 cronie
yum install cronie
# 查看 Crontab 任务
crontab -l
Centos 7安装 Crontab:

2.2 Python 安装 python-crontab
在Python中使用 crontab ,还需要下载其对应的依赖包,下载安装方式如下:
# 安装Crontab
pip3 install python-crontab
Python 安装 Crontab 依赖:

若安装过程中遇到SSH支持问题相关的错误提醒,可更换如下方式进行安装:
# 安装Pycrypto:(豆瓣源)
pip3 install python-crontab -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
三、Python中使用Crontab
Crontab 在 Python中的使用相对简单,我们采用如下方式创建定时任务。
from crontab import CronTab
# 创建linux系统当前用户的crontab(当然也可以创建其他用户的,但需要对应的权限,如:user='root')
my_user_cron = CronTab(user=True)
# ~~~~~每日任务~~~~~
# 创建任务(指定绝对路径)
daily_job = my_user_cron.new(
command='python3 /home/workspace/Python3ForSftpjy5g/sftp_daily.py >> /home/workspace/Python3ForSftpjy5g/assets/output/log_crontab.txt')
# "每天凌晨2点" 执行一次 sftp_daily.py
daily_job.setall('0 2 * * *')
# ~~~~~每月任务~~~~~
# 创建任务(指定绝对路径)
monthly_job = my_user_cron.new(
command='python3 /home/workspace/Python3ForSftpjy5g/sftp_monthly.py >> /home/workspace/Python3ForSftpjy5g/assets/output/log_crontab.txt')
# "每月1日凌晨2点" 执行一次 sftp_monthly.py
monthly_job.setall('0 2 1 * *')
# 将crontab写入linux系统配置文件
my_user_cron.write()
# 命令行输入:python3 crontab_job.py 执行该py脚本,则定时任务设定完毕!
# 此刻在Linux终端 输入 contrab -l 可查看所有定时任务。

四、Crontab 使用详解
在crontab文件与crontab命令中,每一行都包含由空格分隔的5个字段,其后跟要执行的定时任务。

4.1 crontab五个字段含义

这里举了几个简单的例子,帮助大家理解这五个字段的含义:
0 * * * * # 每小时(整点)执行一次
0 1 * * * # 每天凌晨1点执行一次
0 1 * * 0 # 每周星期日凌晨1点执行一次
0 1 1 * * # 每月1号1点执行一次
0 1 1 1 * # 每年1月1日1点执行一次
4.2 分隔与连字符用法
crontab的五个字段可能包含一个或多个值,字段内由逗号分隔或由连字符分隔:
*星号运算符表示任何值或始终:
如果您在 Hour 字段中有星号符号,则表示该任务将每小时执行一次。,逗号运算符允许指定要重复的值的列表:
例如,如果1,3,5设置在“小时”字段中,任务将在凌晨1点、凌晨3点、凌晨 5点执行。-连字符运算符允许指定一个值范围:
入力,如果1-5设置在“星期”字段中,任务将从星期一到星期五运行。/斜杠运算符允许指定将在它们之间的特定间隔内重复的值。
例如,如果*/4设置在“小时”字段中,则表示该操作将每四个小时执行一次;其与0,4,8,12,16,20的设定含义相同。
这里举了几个简单的例子,帮助大家理解分隔与连字符用法:
*/5 * * * * # 每5分钟执行一次
0 8-16 * * * # 每天从上午8点到下午4点整点执行一次
0 15 * * 1-5 # 周一到周五每天15:00执行一次
0 3 1,15 * * # 每个月1号、15号凌晨3点执行一次
五、Linux Crontab 命令行
Linux Crontab 命令行简述如下:
crontab -e编辑 crontab 文件,如果不存在则创建一个。crontab -l显示 crontab 文件内容。crontab -r删除当前的 crontab 文件。crontab -i删除您当前的 crontab 文件,并在删除前提示。
参考
python-crontab:
https://pypi.org/project/python-crontab/
使用 Crontab 设置 Cron 任务:
https://linuxize.com/post/scheduling-cron-jobs-with-crontab/
= THE END =
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

一文详解 Linux Crontab 调度任务的更多相关文章
- 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)
一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop) 概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...
- 一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)
概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间总结一下是值得的! 本文内容脑图如下: top 命令 top 命令我想大家都挺熟悉吧! ...
- Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)
1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
- linux下sort命令使用详解---linux将文本文件内容加以排序命令
转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- (转)详解Linux中SSH远程访问控制
详解Linux中SSH远程访问控制 原文:http://blog.51cto.com/dengqi/1260038 SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TC ...
- 详解Linux运维工程师
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
- 一文详解Hexo+Github小白建站
作者:玩世不恭的Coder时间:2020-03-08说明:本文为原创文章,未经允许不可转载,转载前请联系作者 一文详解Hexo+Github小白建站 前言 GitHub是一个面向开源及私有软件项目的托 ...
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
随机推荐
- How to get the return value of the setTimeout inner function in js All In One
How to get the return value of the setTimeout inner function in js All In One 在 js 中如何获取 setTimeout ...
- 你真的会使用Typora吗?
你真的会使用Typora吗? 标题 一级标题:# 空格+内容 二级标题:## 空格+内容 字体 加粗:内容两边各加两个*号 你真美! 斜体:内容两边各加一个*号 你真帅! 删除线:两边各加两个~号(波 ...
- web3.0、比特币、区块链、元宇宙,以及那些待收割的韭菜们!
前几天看到周星驰在社交账号上招聘web3.0的人才,感觉有必要说说web3.0,当然不是基于技术层面,而是从另一个维度说说web3.0以及其它相关的概念,从而做到如何反欺诈,如何避免被资本割韭菜.想到 ...
- 七、Ajax请求
七.Ajax请求 客户端(浏览器)向服务端发起请求的形式: 地址栏:GET 超链接标签:GET form表单:GET或POST Ajax(重要):GET或POST或PUT或DELETE AJAX(As ...
- webRTC demo
准备: 信令服务 前端页面用于视频通话 demo github 地址. 前端页面 为了使 demo 尽量简单,功能页面如下,即包含登录.通过对方手机号拨打电话的功能.在实际生成过程中,未必使用的手机号 ...
- Python基础指面向对象:2、动静态方法
面向对象 一.动静态方法 在类中定义的函数有多种特性 1.直接在类中定义函数 再类中直接定义函数,默认绑定给对象,类调用时有几个参数就要传几个参数,对象调用时该函数的第一个参数默认为对象 # 定义 ...
- prefetch和preload
前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介 ...
- MAUI新生-XAML语法基础:语法入门Element&Property&Event&Command
一.XAML(MAUI的XAML)和HTML 两者相似,都是标签语言(也叫标记)组成的树形文档.每个标签元素,可视为一个对象,通过"键=值"形式的标签属性(Attribute),为 ...
- clickhouse在风控-风险洞察领域的探索与实践
一.风险洞察平台介绍 以Clickhouse+Flink实时计算+智能算法为核心架构搭建的风险洞察平台, 建立了全面的.多层次的.立体的风险业务监控体系,已支撑欺诈风险.信用风险.企业风险.小微风险. ...
- 嵌入式-C语言基础:数组得初始化
#include<stdio.h> int main() { int a[10]; int size=sizeof(a)/sizeof(a[0]);//计算数组得大小 for(int i= ...