首页 > 其他分享 >记一次线上bug:crontab 被意外清空

记一次线上bug:crontab 被意外清空

时间:2023-07-04 10:44:05浏览次数:37  
标签:10 31 cmd crontab ssh 清空 bug

记一次线上bug:crontab 被意外清空

目录

问题概述

同事反馈,某台服务器的crontab 被清空了.

看了cron运行日志来看,问题出在这里:

Jul  3 10:01:24 10-10-65-235 crontab[19333]: (root) REPLACE (root)

这一时刻被替换掉了,后续就没有任务执行了。

然后紧急恢复备份,并从日志中检查遗漏项。

问题排查

定位出问题后,就从history中找执行的操作。

可从history中没有看到 crontab -r 的操作被执行。

后在Google搜索问题找到一些类似的情况,是由于远程登录、加空格之类的导致的(https://cloud.tencent.com/developer/article/2222953)。

我看了后,就发现这一定是我的锅了,并且受影响的还有其他两台设备。

问题复现

我的操作是从远程服务器通过 ssh 直接执行的命令,卡住之后 ctrl+C中断了操作,于是任务被清空。

复现流程:

  • 创建任务(保证任务列表中有内容,不为空)。

    • ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:29:52 ─╮
      ╰─ crontab -l                                                                              ─╯
      # Minute   Hour   Day of Month       Month          Day of Week        who      Command
      # (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)
      
      20 17 * * 1-5 open "https://tengyun.qianxin-inc.cn/home/workspace/worklog"
      
      
      ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:29:54 ─╮
      ╰─                                                                                         ─╯
      
  • 使用ssh命令执行能卡住的命令,如crontabcrontab -

    • ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:29:54 ─╮
      ╰─ ssh [email protected] crontab                                                           ─╯
      
      
  • 命令卡住,此刻查看 crontab -l 还是有的。

    • ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:30:59 ─╮
      ╰─ crontab -l                                                                              ─╯
      # Minute   Hour   Day of Month       Month          Day of Week        who      Command
      # (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)
      
      20 17 * * 1-5 open "https://tengyun.qianxin-inc.cn/home/workspace/worklog"
      
      ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:31:02 ─╮
      ╰─                                                                                         ─╯
      
      
  • 使用ctrl+C结束掉后检查任务列表。

    • ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:29:54 ─╮
      ╰─ ssh [email protected] crontab                                                           ─╯
      ^C%                                                                                           
      ╭─ ~/cmd ▓▒░··························································░▒▓ ✔  55s  10:31:30 ─╮
      ╰─ crontab -l                                                                              ─╯
      
      ╭─ ~/cmd ▓▒░·······························································░▒▓ ✔  10:31:33 ─╮
      ╰─                                                                                         ─╯
      

问题复现成功。

其他测试

  • 后又分别在本机直接测试了这些指令,均没有清空任务列表。只有在ssh操作时,会被清空。
  • ssh 操作中 ssh XXX@XXX bash -c "crontab -l" 该命令也会被卡住。

总结

产生的操作,弄明白了,但是原理还是没搞明白。

避坑方法:

  • 定时备份。
  • 在卡住时,不要中断,先备份,在停止掉。

又是一次难忘的经历。

标签:10,31,cmd,crontab,ssh,清空,bug
From: https://www.cnblogs.com/nanshaobit/p/17525062.html

相关文章

  • 记录一下最近遇到的UE5 BUG
    1.UE5.2打包后,打开项目崩溃,提示:Assertionfailed:CastResult[File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\Field.h][Line:961] CastFieldCheckedfailedwith0x0000015001062400  0x00007ff69dd254b6YH.exe!FRigVMMemoryHandle::......
  • Idea远程debug调试本地代码 Remote JVM Debug
    如果项目太大本地启动不了,或者假设你项目是微服务项目依赖太多,你写了个功能后,想本地启动debug调试又不方便,此时可以用一个idea远程debug神奇。实现访问测试环境,回调到你本地启动的代码。1,准备一个springboot项目什么都不用配置2,idea设置RemoteJVMDebug端口随便设置就行......
  • 新1期视频第14课und异常中断模式的bug以及对应的解决方法
    正在学习新1期第14课und异常模式程序示例的同学,可能会发现014_und_exception_014_004\001的代码存在如下BUG,学员在论坛反馈后,我们已经第一时间解决,下面将以对话的形式完整的呈现这个解决方案。**学员azoxi:**对ARM裸机加强版-第14课und异常模式有打印异常疑惑,以下是我的start.S代......
  • [GPT] Linux 如何查看 crontab 的运行记录
     要查看crontab的运行记录,可以使用以下命令: $grepCRON/var/log/syslog或者 $tail /var/log/syslog 这将在/var/log/syslog文件中查找包含"CRON"关键字的日志条目,其中包含有关crontab任务运行的信息。请注意,这个命令假设你的系统日志文件位于/var/log/syslog......
  • 动态路由-刷新页面时的 短暂404 bug修复
    动态路由-刷新页面时的bug修复1.问题说明如果我们手动刷新浏览器网页,会发现跳到了404页面对于addRoute添加的路由,在刷新时会白屏 2.问题分析解决页面刷新时,页面404问题在静态路由后面有一个路由通配符,addRoutes添加的路由是异步添加的。路由设置中的404页处在中间位置,而......
  • maxscript pathConfig.appendPath 的 bug
    pathConfig.appendPath可以很方便的把2个路径Combine在一起不管你后面带不带斜杠pathConfig.appendPath@"C:\try"@"kle.jpg""C:\try\kle.jpg"pathConfig.appendPath@"C:\try"@"kle.jpg""C:\try\kle.jpg"很酷,然后path......
  • Debug-logcat使用
    注释掉一行关键代码运行应用,应用崩溃了解决方案:在LogCat中寻找最后一个异常及其栈跟踪的第一行(对应着源代码)这里是问题发生的地方,也是寻找解决方案的最佳起点......
  • Debug Golang源码中的单元测试
    goland配置如上,既可以debuggolang源码中的单元测试。......
  • linux计划任务crontab的使用
    编辑计划任务:   crontab-e查看计划任务:   crontab-l 使用实例:实例1:每1分钟执行一次command命令:*****command实例2:每小时的第3和第15分钟执行命令:3,15****command实例3:在上午8点到11点的第3和第15分钟执行命令:3,158-11***command实例4:每隔两天的......
  • VS Debug&Release
    你也可以像Debug一样调试你的Release版,只要加入调试符号。在Project/Settings...中,选中Settingsfor"Win32Release",选中C/C++标签,Category选General,DebugInfo选ProgramDatabase。再在Link标签Projectoptions最后加上"/OPT:REF"(引号不要输)。这样调试器就能使......