与善人居,如入兰芷之室,久而不闻其香;与恶人居。如入鲍鱼之肆,久而不闻其。——刘向 楠少博客 阅读文章 记一次线上bug:crontab被意外清空 楠少 2023-07-04 6666666 8888888 BUG 爬坑 摘要 ## 记一次线上bug:crontab 被意外清空 [TOC] ### 问题概述 同事反馈,某台服务器的`crontab` 被清空了. 看了`cron`运行日志来看,问题出在这里: ```txt 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`中断了操作,于是任务被清空。 复现流程: + 创建任务(保证任务列表中有内容,不为空)。 + ```txt ╭─ ~/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`命令执行能卡住的命令,如`crontab` 或 `crontab -` + ```txt ╭─ ~/cmd ▓▒░·····················································░▒▓ ✔ 10:29:54 ─╮ ╰─ ssh nanshao@127.0.0.1 crontab ─╯ ``` + 命令卡住,此刻查看 `crontab -l` 还是有的。 + ```txt ╭─ ~/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`结束掉后检查任务列表。 + ```txt ╭─ ~/cmd ▓▒░·····················································░▒▓ ✔ 10:29:54 ─╮ ╰─ ssh nanshao@127.0.0.1 crontab ─╯ ^C% ╭─ ~/cmd ▓▒░················································░▒▓ ✔ 55s 10:31:30 ─╮ ╰─ crontab -l ─╯ ╭─ ~/cmd ▓▒░·····················································░▒▓ ✔ 10:31:33 ─╮ ╰─ ─╯ ``` 问题复现成功。 ### 其他测试 + 后又分别在本机直接测试了这些指令,均没有清空任务列表。只有在`ssh`操作时,会被清空。 + `ssh` 操作中 `ssh XXX@XXX bash -c "crontab -l"` 该命令也会被卡住。 ### 总结 产生的操作,弄明白了,但是原理还是没搞明白。 避坑方法: + 定时备份。 + 在卡住时,不要中断,先备份,在停止掉。 ### 又是一次难忘的经历。 下一篇:office tool plus 工具 文章评论 [ 聊聊技术 聊聊自己 ] 在巴甫洛夫条件反射 试验中:给定一条狗,每次摇铃后喂食,足够次数后,狗则听到铃声将会习惯性的分泌唾液,由此引发对铃声的依恋。延伸到实际,给定一个喜欢的妹子,每次见面赠与巴甫洛夫式 的礼品或者零食,由此引发妹子的依恋。引入薛定谔的猫 理论,在未表白前,妹子与自己一直处于一种“概率云”的状态,一旦表白则“概率云”将消失成为实际。在 巴甫洛夫式 后且未表白前,自己与妹子的关系为“既是恋人又不是恋人”的矛盾体。返回巴甫洛夫式 试验中,在妹纸形成足够的依恋过后,则可以打破薛定谔 “概率云”的状态。这个谜一样的自己,这一刻 薛定谔 附体,带着量子论般深沉的哀愁,让她从此不能自拔! 自此创作 巴甫洛夫薛定谔把妹法,深藏功与名。