定时任务之cron
liuian 2024-12-01 01:00 64 浏览
1.引言
定时任务在日常的开发中使用的频率越来越高,比如电商系统每天进行的数据统计任务,再比如信用卡还款日提醒等等,都可能会使用定时任务来实现。所以如何实现定时任务是我们经常碰到的问题,采用哪种方案可能影响到系统的架构设计。在系统的不断迭代的过程中,定时任务的实现方式也会一直会跟随着演进。本篇我们介绍定时任务的实现方案之一cron。
2.cron是什么
cron是linux系统中以后台进程模式周期性地执行命令或指定程序任务地服务软件。默认安装完linux系统之后,cron服务软件便会启动,服务对应的进程名字为crond。cron服务会定期(默认每分钟检查一次)检查系统中是否有需要执行的任务工作计划。cron工具对应的crontab命令依赖于crond服务。
3.cron的适用场景
它非常适合定期运行脚本、备份数据、清理临时文件等一系列重复性任务。
4.cron原理
crond服务工作时会以每分钟为单位查看在/var/spool/cron路径下以系统用户名命名的定时任务文件,确定是否有需要执行的任务计划。如果有就把任务调到内存中执行,使用crontab命令编辑的文件最终都会以当前用户命名存在于/var/spool/cron路径下。
5.cron的使用方法
cron的使用分为查看定时任务和编辑定时任务两个操作。
5.1查看定时任务
在linux命令行输入crontab -l,如果没有配置定时任务则不会显示任何东西。
5.2编辑定时任务
在linux命令行输入crontab -e,进入编辑模式,每一行表示一个定时任务,格式是cron表达式紧跟着一个命令,表示按照cron表达式的方式执行命令。
cron表达式共五列,从左到右依次表示分钟、小时、天、月、星期。每一列都可以采用如下的方式指定。
- *,表示不限制,可以翻译为每,比如表达式 “0 0 * * * ”表示每天的0点0分(星期不显示,月份不限制,天不限制,限制0点和0分)
- 数字、逗号分隔的数字、连接符表示的范围,比如表达式“0 1,3,5 2-7 3 *” 表示3月份2号到7号的每一天的凌晨1点0分 3点0分 5点0分分别执行
- /n,表示每隔n执行,比如表达式“/10 * * * * ”每隔10分钟执行
每一列的含义和取值范围如下
列 | 含义 | 取值 |
第一列 | 代表分钟 | 0-59 |
第二列 | 代表小时 | 0-23 |
第三列 | 代表天 | 1-31 |
第四列 | 代表月 | 1-12 |
第五列 | 代表星期 | 0-7,0和7 都代表星期天 |
示例:
- * * * * *:每分钟运行一次任务。
- 0 1-5 * * *:每天凌晨的1点到5点的的第0分钟分别运行一次任务。
- 0 0 1 * *:每月1号的00:00(午夜)运行一次任务。
- 0 0 * * 1:每周一的00:00运行一次任务。
6.注意事项
- 定时任务后面执行的命令不能有百分号,如果有必须要转义
- 定时任务尽量用脚本,即将命令放入脚本
- 执行定时任务尽量用全路径,避免脚本找不到造成执行失败
- 结尾加上 &>/dev/null或者>/dec/null 2>&1,避免产生输出到控制台
7.问题排查
如果任务没有按照预期执行,可以从以下几个方面排查一下
- 自己手工执行一下命令,看是否是命令存在问题
- 通过日志排查,通过tail -f /var/log/cron查看日志
- 权限问题,检查如下两个文件。第一个/etc/cron.deny 文件中所列用户不允许使用crontab命令 ;第二个/etc/cron.allow 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
8.优缺点
优点:
- 自动化:cron允许用户自动化任务,无需人工干预。
- 资源利用:在不需要运行时,cron任务不会使用系统资源。
- 可扩展性:cron允许用户创建复杂的执行计划,可以包含多个任务。
缺点:
- 错误配置:如果配置不当,cron任务可能不会运行或运行不正确。
- 安全性问题:如果cron任务包含敏感信息或对系统产生负面影响的命令,那么错误的cron设置可能会导致安全问题。
- 调试困难:cron任务的故障排除可能比较困难,因为它们通常在后台运行。
- 时间精准度,cron表达式只能精确到分钟,如果需求需要精确到秒级则不适合。
相关推荐
- 怎样解除自动关机模式(怎样解除自动开关机)
-
1、打开手机主界面,找到系统自带的“时钟”应用,点击打开它。2、点击进入时钟后,点击右下角的“计时器”。3、进入到计时器后,点击“在计时结束启用雷达”这个选项。4、然后在这里,下拉到最下面,勾选“停...
- 电脑最高配置是什么配置2025
-
一,2023最新主流电脑装机配置如下。二,处理器可以使用十二代的i512400或者i512490f,内存16gb双通道,显卡rtx3060,主板可以使用b660m或者h610m。三,如果十三代酷睿...
- MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能
-
数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...
- 一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法
-
在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...
- 闲来无事,学学Mysql增、删,改,查
-
Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- 下载工具合集_下载工具手机版
-
迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...
- mediamtx v1.15.2 更新详解:功能优化与问题修复
-
mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...
- 声学成像仪:泄露监测 “雷达” 方案开启精准防控
-
声学成像仪背景将声像图与阵列上配装的摄像实所拍的视频图像以透明的方式叠合在一起,就形成了可直观分析被测物产生状态。这种利用声学、电子学和信息处理等技术,变换成人眼可见的图像的技术可以帮助人们直观地认识...
- 最稳存储方案:两种方法将摄像头接入威联通Qu405,录像不再丢失
-
今年我家至少被4位邻居敲门,就是为了查监控!!!原因是小区内部监控很早就停止维护了,半夜老有小黄毛掰车门偷东西,还有闲的没事划车的,车主损失不小,我家很早就配备监控了,人来亮灯有一定威慑力,不过监控设...
- 离岗检测算法_离岗检查内容
-
一、研发背景如今社会许多岗位是严禁随意脱离岗位的,如塔台、保安室、监狱狱警监控室等等,因为此类行为可能会引起重大事故,而此类岗位监督管理又有一定困难,因此促生了智能视频识别系统的出现。二、产品概述及工...
- 消防安全通道占用检测报警系统_消防安全通道占用检测报警系统的作用
-
一、产品概述科缔欧消防安全通道占用检测报警系统,是创新行业智能监督管理方式、完善监管部门动态监控及预警预报体系的信息化手段,是实现平台远程监控由“人为监控”向“智能监控”转变的必要手段。产品致力于设...
- 外出住酒店、民宿如何使用手机检测隐藏的监控摄像头
-
最近,一个家庭在他们的民宿收到了一个大惊喜:客厅里有一个伪装成烟雾探测器的隐藏摄像头,监视着他们的一举一动。隐藏摄像头的存在如果您住在酒店或民宿,隐藏摄像头不应再是您的担忧。对于民宿,房东应报告所有可...
- 基于Tilera众核平台的流媒体流量发生系统的设计
-
曾帅,高宗彬,赵国锋(重庆邮电大学通信与信息工程学院,重庆400065)摘要:设计了一种基于Tilera众核平台高强度的流媒体流量发生系统架构,其主要包括:系统界面管理模块、服务承载模块和流媒体...
- 使用ffmpeg将rtsp流转流实现h5端播放
-
1.主要实现rtsp转tcp协议视频流播放ffmpeg下载安装(公认业界视频处理大佬)a、官网地址:www.ffmpeg.org/b、gitHub:github.com/FFmpeg/FFmp…c、推...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
