精华内容
下载资源
问答
  • 这里采用的是多项目配置,把自动任务的项目放在自创的文件夹(webroot)中。 这里为什么是放文件夹,而不是war包的形式,因为正常情况下你放入项目打出来的war下去,运行Tomcat的时候会自动帮你解析出来个文件夹...

    本地host文件
    在这里插入图片描述

    Tomcat目录
    在这里插入图片描述
    需要跑的文件夹
    在这里插入图片描述

    Tomcat中的server.xml文件
    在这里插入图片描述

    Postmen请求
    在这里插入图片描述

    Tomcat控制台
    在这里插入图片描述

    这里采用的是多项目配置,把自动任务的项目放在自创的文件夹(webroot)中。
    这里为什么是放文件夹,而不是war包的形式,因为正常情况下你放入项目打出来的war下去,运行Tomcat的时候会自动帮你解析出来两个文件夹:ROOT、项目名文件夹,Tomcat一跑等于加载了两个容器,最后打出了同一时间执行了两次自动任务。
    IDEA中用Maven install时会生成项目名的文件夹及项目名的war包,咱们只需要拿项目名的文件夹扔到自己设置的docBase中即可。
    Tomcat在跑的时候,项目需要更新的话就把Maven install后生成的项目名文件夹扔到指定的docBase中的目录即可。

    后期拉文件夹到Linux服务器的时候怕文件夹比较大产生丢包,所以研究了新方式直接扔war过去即可。
    Tomcat中的server.xml

    在这里插入图片描述
    Tomcat的webroot目录
    在这里插入图片描述
    这里扔过来的war包,重命名为ROOT,运行即可。
    更新时只需要将war包改名为ROOT然后扔到webroot目录下就可以更新项目了。

    war不改成ROOT名的话,运行时访问是要带项目名的。

    展开全文
  • 在Lyft,我们选择将服务器基础架构移至Kubernetes,Kubernetes是分布式容器编排系统,以利用自动化的优势,拥有可构建的可靠平台,并通过提高效率来降低总体成本。分布式系统可能难以推理和理解,Kubernetes也不例外...

    9176f4f76a62da8802eb2d51e60078ee.png

    在Lyft,我们选择将服务器基础架构移至Kubernetes,Kubernetes是分布式容器编排系统,以利用自动化的优势,拥有可构建的可靠平台,并通过提高效率来降低总体成本。

    分布式系统可能难以推理和理解,Kubernetes也不例外。尽管Kubernetes有很多好处,但我们在采用Kubernetes内置的CronJob作为运行重复的计划任务的平台时发现了一些痛点。在这个分为两部分的博客系列中,我们将深入探讨Kubernetes CronJob的技术和操作缺陷,并分享我们为克服这些缺陷所做的工作。

    本系列的第1部分(本文)详细讨论了使用Lyft的Kubernetes CronJob所遇到的缺点。在第2部分中,我们分享了我们为解决Kubernetes堆栈中的这些问题所做的工作,以提高可用性和可靠性。

    1 这是给谁的看的

    • Kubernetes CronJob的用户
    • 任何人在Kubernetes上构建平台
    • 任何对在Kubernetes上运行分布式的计划任务感兴趣的人
    • 有兴趣了解现实世界中大规模使用Kubernetes的任何人
    • Kubernetes贡献者

    2 阅读你将会得到什么?

    • 深入了解Kubernetes的各个部分(尤其是CronJob)在现实世界中的行为。
    • 在Lyft这样的公司中使用Kubernetes作为平台的经验教训,以及我们如何解决这些缺点。

    3 先决条件

    • 基本了解cron概念
    • 对CronJob的工作原理有基本的了解,特别是CronJob控制器,它创建的Jobs和它们的底层Pod之间的关系,以便更好地理解CronJob的深层次以及与Unix cron的比较。
    • 熟悉sidecar容器模式及其用途。在Lyft,我们利用sidecar容器排序来确保打包为sidecar容器的运行时依赖项(如Envoy,statsd等)在应用程序容器本身之前启动并运行。

    4 背景和术语

    • 这cronjobcontroller是Kubernetes控制面板中协调CronJobs的代码段
    • 据说cron在某些机器执行时会被调用(通常根据其时间表)
    • Lyft Engineering在平台基础架构模型上运行,该模型中有一个基础架构团队(以下称为平台团队,平台工程师或平台基础架构),平台的客户是Lyft的其他工程师(以下称为开发人员,服务开发人员,用户或客户)。Lyft的工程师拥有,操作和维护其构建的内容,因此本文通篇使用“操作”。

    5 Lyft的CronJobs

    今天,在Lyft,我们在多租户生产Kubernetes环境中运行了将近500个cron任务,每小时执行1500多次调用。

    Lyft在各种用例中广泛使用了重复的计划任务。在采用Kubernetes之前,这些都是在Linux机器上直接使用Unix cron执行的。开发团队负责crontab 使用平台基础架构团队维护的基础架构代码(IaC)管道编写其定义并提供运行它们的实例。

    作为将工作负载容器化和迁移到我们内部Kubernetes平台的更大努力的一部分,我们选择采用Kubernetes CronJob *来代替Unix cron作为这种新的容器化环境中的cron执行程序。像许多人一样,我们选择Kubernetes是因为它具有许多理论上的好处,其中之一就是有效地利用资源。考虑一个每周运行15分钟的cron。在我们旧的环境中,运行cron的机器空闲时间为99.85%。使用Kubernetes CronJob,仅在cron调用的生命周期内使用计算资源(CPU,内存)。在其余时间里,Kubernetes可以有效地使用这些资源来运行其他CronJob或一起缩减集群。鉴于以前的执行cron任务的方法,通过过渡到临时创建工作的模型,可以获得很多好处。

    215aff09ab5cd916f27bb54a7116c624.png
                        Lyft K8s堆栈中的平台和开发人员所有权边界

    自从采用Kubernetes作为平台以来,开发团队不再配置和操作自己的计算实例。取而代之的是,平台工程团队负责维护和操作Kubernetes堆栈中使用的计算资源和运行时依赖项,以及自己生成Kubernetes CronJob对象。开发人员只需配置其cron计划和应用程序代码。

    在纸上这一切听起来都不错,但是在实践中,我们发现了使用CronJob将cron从易于理解的传统Unix cron环境迁移到Kubernetes的分布式临时环境的几个痛点。

    *虽然CronJob曾经是(并且至今仍是)(从Kubernetes v1.18起)是一个beta API,但我们发现它符合我们当时的要求,而且与其他Kubernetes很好地契合我们已经构建的基础架构工具。

    6 Kubernetes CronJob(与Unix cron相比)有什么不同?

    72dbc6d1815b2acdf70ff2151cd452a1.png

    执行Kubernetes CronJob涉及的事件和K8s软件组件的简化序列

    为了更好地理解为什么在生产环境中很难使用Kubernetes CronJobs,我们必须首先讨论CronJob与众不同的原因。Kubernetes CronJobs承诺可以像cron任务一样在Linux或Unix系统上运行;但是,它们的行为与Unix cron相比有一些关键差异:启动性能和故障处理。

    7 启动表现

    我们首先将启动延迟定义为从预期的cron启动到实际执行的应用代码的时间。也就是说,如果cron预计在处运行00:00:00,而应用程序代码实际上在处开始执行00:00:22,则特定cron调用的启动延迟为22秒。

    传统的Unix crons的启动延迟非常短。当需要调用Unix cron时,只需运行指定的命令。为了说明这一点,请考虑以下cron定义:

    #每天晚上在午夜运行date命令
    0 0 * * * date >> date-cron.log

    使用此cron定义,可以期待以下输出:

    #date-cron.log
    Mon Jun 22 00:00:00 PDT 2020
    Tue Jun 23 00:00:00 PDT 2020

    另一方面,Kubernetes CronJobs可能会经历严重的启动延迟,因为它们需要在任何应用程序代码开始运行之前发生多个事件。仅举几个:

    • cronjobcontroller 处理并决定调用CronJob
    • cronjobcontroller 根据CronJob的Job规范创建Job
    • jobcontroller 注意到新创建的Job并创建一个Pod
    • Kubernetes准入控制器将Sidecar Container规范注入Pod规范*
    • kube-scheduler 安排Pod到kubelet上
    • kubelet 运行Pod(拉出所有容器图像)
    • kubelet 启动所有杂物箱*
    • kubelet 启动应用程序容器*
    • Lyft的Kubernetes堆栈独有

    在Lyft,我们发现,一旦在Kubernetes环境中达到一定规模的CronJobs,启动延迟就会特别受到#1,#5和#7的影响。

    8 Cronjobcontroller 处理延迟

    为了更好地了解这种延迟的来源,让我们深入了解内建的源代码cronjobcontroller。通过Kubernetes 1.18,它cronjobcontroller仅每10秒列出所有CronJob,并对每个CronJob执行一些控制器逻辑。在cronjobcontroller实施这样做同步,发行至少API调用每一个的cronjob。当CronJob的数量超过一定数量时,这些API调用将开始受速率限制。10秒轮询周期的延迟和API客户端速率限制的延迟加起来并导致CronJobs的启动延迟明显。

    9 计划Cron Pod

    由于Cron时间表的性质,大多数的Cron都将在分钟的顶部运行(XX:YY:00)。例如,@hourly cron预计在01:00:00,等执行02:00:00。在多租户cron平台中,每小时,每15分钟,每5分钟等等都计划运行许多cron,这会产生热点,需要同时调用许多cron。在Lyft,我们注意到一个这样的热点就是小时的高峰(XX:00:00)。这些热点会给CronJob执行的快乐路径中涉及的控制平面组件施加压力并暴露出额外的客户端速率限制kube-scheduler,kube-apiserver从而导致启动延迟显着增加。

    此外,如果你没有为高峰需求配置计算(和/或为计算实例使用云提供商),而是使用诸如群集自动缩放器之类的工具动态扩展节点,则节点启动时间会给启动CronJob Pods带来额外的延迟。

    10 Pod执行:非应用容器

    一旦CronJob Pod成功调度到上kubelet,就kubelet需要提取并执行所有sidecar和应用程序本身的容器镜像。由于Lyft使用Sidecar排序方式控制应用程序容器的方式,如果这些Sidecar容器中的任何一个启动缓慢或需要重新启动,它们将传播额外的启动延迟。

    总而言之,在多租户环境中,在实际执行应用程序代码之前发生的所有这些事件,再加上CronJob的规模,都可能引入明显且不可预测的启动延迟。稍后我们将看到,此启动延迟会导致CronJob错过运行,从而对CronJob在现实世界中的行为产生负面影响。

    11 集装箱故障处理

    监视cron的执行是一个好习惯。使用Unix cron,这样做非常简单。Unix crons使用指定的解释给定的命令$SHELL,并且,当命令退出时(无论成功与否),都会完成特定的调用。监视Unix cron的一种基本方法是引入命令包装器脚本,如下所示:

    #!/bin/sh
    my-cron-command
    exitcode=$?

    if [[ $exitcode -ne 0 ]]; then
        # stat-and-log is pseudocode for emitting metrics and logs
        stat-and-log "failure"
    else
        stat-and-log "success"
    fi

    exit $exitcode

    使用Unix cronstat-and-log时,无论每次cron调用都将完全执行一次$exitcode。然后,可以将这些指标用于执行失败的简单警报。

    使用Kubernetes CronJob时,默认情况下会重试故障,并且执行过程可能具有多个故障状态(Job故障和容器故障),因此监控并不那么简单。

    在应用程序容器中使用类似的脚本,并且将Jobs配置为在失败时重新启动,CronJob会重复执行并喷出度量标准,并在失败时记录多达BackoffLimit次数,从而给尝试调试它的开发人员带来很多噪音。此外,由于应用程序容器可能会自行恢复并成功完成,因此使用包装脚本中的第一个失败的幼稚警报可能是无法采取行动的噪音。

    或者,你可以使用API层指标针对Job失败(例如 kube_job_status_failed来自kube-state-metrics)在Job级别而非应用程序容器级别发出警报。这种方法的缺点是,一旦作业到达终端故障状态,就不会发出呼叫通知BackoffLimit,这可能比第一次应用程序容器故障要晚得多。

    12 是什么导致CronJobs间歇性失败?

    不可忽略的启动延迟和失败重试循环会导致额外的延迟,这些延迟可能会干扰Kubernetes CronJobs的重复执行。对于频繁的CronJob或与空闲时间相关的应用程序执行时间较长的CronJob,此额外的延迟可以延续到下一个计划的调用中。如果CronJobConcurrencyPolicy: Forbid设置为禁止并发运行,则此残留会导致将来的调用无法按时执行并得到备份。

    ec29541aa3e862d1861bd5e85627b448.png

    示例时间线(从的角度来看cronjobcontroller)在startingDeadlineSeconds特定的每小时CronJob中超出了该时间线-CronJob错过了运行,直到下一个预定时间才会被调用

    我们在Lyft观察到的一个更加险恶的场景是CronJobstartingDeadlineSeconds设置之后,CronJobs可能会完全丢失调用。在这种情况下,当启动延迟超过时startingDeadlineSeconds,CronJob将完全错过运行。另外,如果CronJob也ConcurrencyPolicy设置为Forbid,则先前调用的重试失败循环也可能延迟下一次调用,从而导致CronJob也丢失。

    13 Kubernetes CronJobs在现实世界中的运营负担

    自开始将这些重复的计划任务移至Kubernetes以来,我们发现开箱即用地使用CronJob从开发人员和平台团队的角度都引入了多个痛点,这些痛点开始抵消了收益和成本。为了节省开支,我们最初选择了Kubernetes CronJob。我们很快意识到,我们的开发人员和平台团队都没有配备必要的工具来操作和理解CronJobs的复杂生命周期。

    Lyft的开发人员在尝试操作和调试其Kubernetes CronJobs时遇到了许多问题和投诉,例如:

    • “为什么我的cron不运行?”
    • “我认为我的cron停止了运行。我如何知道我的cron是否正在运行?”
    • “我不知道cron不在运行,我只是以为它在运行!”
    • “我该如何补救X失败的Cron?我不能只是自己输入和运行命令。”
    • “你能解释一下为什么这个Cron似乎错过了X和Y [时间段]之间的一些时间表吗?”
    • “我们有X(大量)corn,每个corn都有自己的警报,维护它们全都变得乏味/痛苦。”
    • “这是工作,豆荚和杂物这是什么?”

    作为平台团队,我们没有能力回答以下问题:

    • 我们如何量化Kubernetes Cron平台的性能特征?
    • 在我们的Kubernetes环境中加入更多CronJobs有什么影响?
    • 与单租户Unix cron相比,运行多租户Kubernetes CronJobs的性能如何?
    • 我们如何开始定义与客户沟通的服务水平目标(SLO)?
    • 作为平台运营商,我们要监视什么并发出警报,以确保在不影响客户的情况下迅速解决平台范围的问题?

    调试CronJob故障并不是一件容易的事,并且通常需要对故障发生的位置以及寻找证据的位置进行直观了解。有时,很难找到这些证据,例如cronjobcontroller仅以高详细日志级别记录的日志。或者,这些痕迹只是在特定时间段后消失,并调试“打hack”游戏,例如CronJob,Job和Pod对象本身上的Kubernetes Events,默认情况下仅保留一小时。这些方法都不容易使用,而且从平台上越来越多的CronJobs的支持角度来看,它们的伸缩性也不佳。

    另外,有时当CronJob错过了太多运行时,Kubernetes只会退出,需要有人手动“松开” CronJob。在实际使用中,这种情况发生的频率比您想像的要高,并且每次手动修复都变得很痛苦。

    总结了我们大规模使用Kubernetes CronJob所遇到的技术和运营问题。在第2部分中,我们分享了我们为解决Kubernetes堆栈中的这些问题所做的工作,以提高CronJobs的可用性和可靠性。

    辛勤的蜜蜂永没有时间悲哀。  「——来自匿名」

    ead67fad5b8e920b8e72eab62e0d898e.png

    如果喜欢文章的话,点点关注,就差你的关注了,更多好玩有趣的云原生前沿技术尽在云原生CTO,如果对你有帮助,欢迎分享给更多人

                                  记得点赞分享哦
    4ba1b64e0a64ba7c4f2b1a83b91cdb5a.gif
    展开全文
  • 下面我来分析下定时任务个命令:at说明:执行定时任务,只运行一.并且依赖于atd服务运行选项:-q queue:将任务放到队列中去,不设置默认即为a队列-l: 显示所有队列的任务。 相当于atq命令-d NUM:删除指定号码的任务...

    其实定时任务我们经常要用到,比如凌晨备份数据库,跑一些php脚本之类的都需要用到定时任务。

    下面我来分析下定时任务的两个命令:

    at

    说明:执行定时任务,只运行一次.并且依赖于atd服务运行

    选项:

    -q queue:将任务放到队列中去,不设置默认即为a队列

    -l: 显示所有队列的任务。 相当于atq命令

    -d NUM:删除指定号码的任务。 相当于atrm命令

    -f FILE:从一个文件中输入替换标准键盘输入

    -v:显示任务执行的时间

    时间选项:

    at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

    TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:

    实例:

    at 16:00   假设当前时间是16:30  则将会在第二天的16:00执行该任务

    at 16:00 2015-9-20

    at now + 5 (minutes|hours|days|weeks)  相对与当前时间的时间

    at 04pm + 3 days

    crontab

    一、crond简介

    说明:实际上我们在服务器上用的最多是该项,而在服务器上at实际上用的很少.crontab表示定时任务循环执行

    使用者权限文件:

    文件:

    /etc/cron.deny

    说明:

    该文件中所列用户不允许使用crontab命令

    文件:

    /etc/cron.allow

    说明:

    该文件中所列用户允许使用crontab命令

    文件:

    /var/spool/cron/

    说明:

    所有用户crontab文件存放的目录,以用户名命名

    crontab文件的含义:

    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

    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字段,表示每十分钟执行一次。

    二、crond服务

    安装crontab:

    yum install crontabs

    服务操作说明:

    /sbin/service crond start //启动服务

    /sbin/service crond stop //关闭服务

    /sbin/service crond restart //重启服务

    /sbin/service crond reload //重新载入配置

    查看crontab服务状态:

    service crond status

    手动启动crontab服务:

    service crond start

    查看crontab服务是否已设置为开机启动,执行命令:

    ntsysv

    加入开机自动启动:

    chkconfig –level 35 crond on

    三、crontab命令详解

    1.命令格式:

    crontab [-u user] file

    crontab [-u user] [ -e | -l | -r ]

    2.命令功能:

    通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

    3.命令参数:

    -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

    file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

    -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

    -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

    -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

    -i:在删除用户的crontab文件时给确认提示。

    实战

    1、每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD.tar.xz;

    解答: 20 3 * * 1-6 /bin/tar JcfP /backups/etc-`date +\%Y-\%m-\%d`.tar.xz /etc

    2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss

    解答:30 2 * * 0 /bin/cp /etc/fstab /backup/fstab-`date +\%Y-\%m-\%d-\%H-\%M-\%S`

    3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线;

    解答:00 00 * * * /bin/grep -E '^(S|M)' /proc/meminfo | /bin/sed '1i ===============' >>/statistics/meminfo.txt

    展开全文
  • 踩坑过程服务器部署了一个flask-apscheduler的定时任务项目,每天的几个时间点会自动推送消息或者跑任务。但经过一段时间后,发现有几个任务莫名其妙的没有运行,其他任务又可以正常运行。排查下来也不是代码问题,...

    踩坑过程

    服务器部署了一个flask-apscheduler的定时任务项目,每天的几个时间点会自动推送消息或者跑任务。但经过一段时间后,发现有几个任务莫名其妙的没有运行,其他任务又可以正常运行。排查下来也不是代码问题,因为其他任务可以跑,就一两个任务不行,反复排查问题无果。后面在网上找原因,提示说可以在flask-apscheduler项目中增加log来排查,我在项目入口监听了log,果不其然,发现了一些问题

    LOG记录2021-01-23 06:00:00 base.py[line:952] WARNING Error getting due jobs from job store 'default': (pymysql.err.OperationalError) (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))"). [SQL: SELECT apscheduler_jobs.id, apscheduler_jobs.job_state FROM apscheduler_jobs WHERE apscheduler_jobs.next_run_time <= %(next_run_time_1)s ORDER BY apscheduler_jobs.next_run_time] [parameters: {'next_run_time_1': 1611352800.002729}] (Background on this error at: http://sqlalche.me/e/13/e3q8) 2021-01-23 06:00:10 base.py[line:120] WARNING Run time of job "job_cordcloud_sign_in (trigger: cron[month='*', day='*', day_of_week='*', hour='6', minute='0', second='0'], next run at: 2021-01-23 06:00:00 CST)" was missed by 0:00:10.012178以上是截取的部分log记录

    问题分析

    从log中可以看到,当执行job名为job_cordcloud_sign_in的任务时,报了一个数据库错误。问题就出在这,我这个任务是需要去查库,然后再走job逻辑的,查库的时候报错了,导致后面的代码没有执行。根据这个错误,网上查解决方案就简单了

    最终原因

    主要是我这个程序里的涉及到数据库操作的任务之间运行间隔时间超过了8小时,而数据库默认8小时不从数据库取数据则断开连接,所以会抛出这个错误

    解决方案方案一:

    网上说可以优化代码,增加重连场景,但我没有采用这种办法,大家可以去尝试下方案二:

    我采用的是直接修改数据库的interactive_timeout配置,默认是28800秒,即8小时show global variables like '%timeout';

    修改方法

    修改my.cnf的配置,如下图

    27058916ce05ee0584c96379e398ff0b.png

    修改后的效果

    6e144e745012a7e3b36774a857929220.png

    总结

    还是自己对底层的东西了解的不够透彻,这种问题应该是比较粗浅的,但我因为没有碰到过此类问题,所以走了很多弯路,在这里也记录下,以免以后自己再掉到同样的坑里。

    展开全文
  • 发布前一下,可以杜绝各种疏忽而引起的功能bug。 自动化测试另外一个重要特点就是快速反馈,反馈越迅速意味着开发效率越高。拿UI组件为例,开发过程都是打开浏览器刷新页面点点点才能确定UI组件...
  • 踩坑过程服务器部署了一个flask-apscheduler的定时任务项目,每天的几个时间点会自动推送消息或者跑任务。但经过一段时间后,发现有几个任务莫名其妙的没有运行,其他任务又可以正常运行。排查下来也不是代码问题,...
  • 这个问题出现两次了,星期一的时候出现,星期二上班的时候发现了,重启了,但是不知道怎么解决,就寻思着先放着,但是今天星期三上班的时候又发现了同样的问题。比较巧合的是&...
  • 13、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务; 14、动态分片:分片广播任务以执行器为维度进行分...
  • jenkins无限构建

    2021-03-04 09:21:14
    jenkins在配置完任务后点击build之后,发现任务列表中自动添加了第二个任务完当前任务自动跑下一个任务下一个任务时,又自动添加了下一个任务,无限循环,第二天才发现,已经了700多╮(╯▽╰)╭ ...
  • QQ三国行脚第三方软件检测机制

    千次阅读 2012-11-02 18:45:38
    最近用C++写了一个全自动跑行脚的小程序,程序只向三国客户端发送按键和鼠标移动命令,不改变任务客户端的数据. 用个号测试, 第一个号自动跑了二十多就被强迫下线,再上线时就被屏蔽了.而此前这个号一直是手动...
  • 定时发送邮件

    千次阅读 2017-05-08 11:21:05
    在做深度学习时,电脑通常需要几天才能够出现好的结果,有时候电脑在的时候,我们有可能回家了,或者已经...2 在ubuntu中添加定时任务,每间隔一个小时或者一分钟发送已邮件 1 自动发送邮件:需要安装mutt和msm
  • 在大的互联网公司干技术的基本都会... 大略思路是:用python写一个脚本来分析网页里的所有url,看是否包含日常的链接,然后把脚本放到crontab里定时任务,10分钟检查。如果发现非法链接,就发告警邮件给相关
  • 我的程序是通过计划任务运行批处理自动执行的,平时都没问题。但有时候,似乎是当数据量大的时候,会出现一条数据同时重复发送了两次。查询主表和结果表后显示:主表发送次数字段为2,结果字段为1(成功),也就是...
  • 它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。(我的理解就是:将部分或者全部的工作流程、逻辑让计算机帮你...
  • 14、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务; 15、动态分片:分片广播任务以执行器为维度进行分...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    2、Excel也别 63 三十三、PDF转DOC 64 三十四、解密高手 64 三十五、公式宽度 66 全部一调整 67 局部调整方法 67 三十六、自定义模板 自动生成指定的Word文件名 68 三十七、从头到脚完美:Word文档布局 69 三十...
  • 执行该一键运行脚本将会自动下载所有任务数据,并为所有任务找到最优模型,然后测试得到提交结果 模型下载 Download Pre-trained Models of Chinese 1、albert_tiny_zh, albert_tiny_zh(训练更久,累积学习20亿个...
  • 3、运行对应任务的脚本(GPU方式): 会自动下载模型和任务数据并开始运行。 bash run_classifier_xxx.sh 如运行 bash run_classifier_iflytek.sh 会开始iflytek任务的训练 4、tpu使用方式(可选) cd CLUE/...
  • 阅读工具 开卷有益

    2012-03-31 14:07:03
    修复设置界面双击飞的Bug 2. 修复特殊路径书籍不能保存进度的Bug 3. 修复前后查询时,输入法窗口没有关闭的Bug 4. 修复某些输入法不能输入文字的Bug 5. 修复查询时,遗留标题栏的Bug 6. 修复使用外挂字体后...
  • PID算法的运用

    2015-06-14 20:23:54
    小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就到房里看小说了,每30分钟来检查一水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一,结果...
  • 你会发现我这任务都保持在50毫秒以内的情况下,我可以保证我的总时间是100毫秒以内完成的,这个50毫秒不是我定的,W3C性能工作组有一个Longtask规范也对这种情况做了规定。 <p><img alt="图片...
  • 当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,仅会执行一。用户可以通过这个指定的名称查找文件或者目录,然后从taskmanager节点的本地文件系统访问它。其实分布式缓存就相当于...
  • 什么是实用技巧,就是... (6)最近一的正确配置:选择“使用‘最后一正确的配置’启动 Windows XP”是解决诸如新添加的驱动程序与硬件不相符之类问题的一种方 法。用这种方式启动,Windows XP只恢复注册表项 ...
  • 冰河教你一性成功安装K8S集群(基于一主从模式)!! 卧槽,运行Docker容器时磁盘空间满了怎么办? 互联网工程 十一长假我肝了这本超硬核PDF,现决定开源!! 为什么互联网巨头们纷纷使用Git而放弃SVN?...
  • 13000余个文件,做一同步检查只需要不到3分钟(还是没有开启缓存),原来bash版了40分钟还没见完成,没有耐心等待就强制中止了,具体好不好用自己感受吧。发布前我分别在Open-wrt 12.09和CentOS6.5上测试上传和...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0272 无标题栏最大化时不覆盖任务栏 178 0273 限制窗体的大小 179 0274 重定义去掉标题栏并最大化窗体 179 0275 使窗体一直居中 179 0276 控制窗体不可移动 180 0277 限制窗体的最大化 180 0278 使窗体...
  • 0272 无标题栏最大化时不覆盖任务栏 178 0273 限制窗体的大小 179 0274 重定义去掉标题栏并最大化窗体 179 0275 使窗体一直居中 179 0276 控制窗体不可移动 180 0277 限制窗体的最大化 180 0278 使窗体...
  • 0272 无标题栏最大化时不覆盖任务栏 178 0273 限制窗体的大小 179 0274 重定义去掉标题栏并最大化窗体 179 0275 使窗体一直居中 179 0276 控制窗体不可移动 180 0277 限制窗体的最大化 180 0278 使窗体...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
热门标签
关键字:

自动任务跑两次