周日傍晚改个“提前5分钟”:9条定时权限规则,让我把小需求做成了一次完整审计
笔名:小六 / 上海 / 1995 女 / 某互联网公司打工人
故事背景:老板说“提前5分钟”,我听见的是“请做一次变更审计”
周日傍晚六点多,我正准备把电脑合上,消息弹了出来:
“把每天某存储服务器上几个媒体文件夹的访问权限调整一下,关闭时间全部提前5分钟。”
这句话很短,短得像一件两分钟就能完成的小事。
翻译成打工人语言,大概是:
1 | |
运维里最危险的需求,往往不是“大改造”,而是“顺手改一下”。 大改造会让所有人提高警惕,小改动却很容易让人直接上手。尤其是定时任务:表面只改分钟数字,背后连接的是权限、用户体验和第二天会不会收到追问。
所以我没有立刻改,而是先把今天的本地 Agent 日志捋了一遍。日志里能确认:这次涉及三个独立的权限守卫,每个守卫都有三段开放窗口;需求只要求提前关闭,开放时间保持不动。也就是说,一共要调整 3 × 3 = 9 条关闭规则。
五分钟很小,九条规则不小。
第一步:先把“提前”翻译成机器能执行的时间
人说“中午十二点提前五分钟”,脑子会自动算成十一点五十五。机器不替你脑补,它只认分钟和小时。
原来的三个关闭时间点是:
1 | |
目标应该是:
1 | |
这里有一个很容易踩的坑:“提前5分钟”不是把 cron 的分钟字段从 0 改成 55 就结束了,小时还要减 1。
标准 cron 的五个字段是:
1 | |
所以 0 12 * * * 变成的不是 55 12 * * *,而是 55 11 * * *。如果只改分钟,不改小时,原本十二点关闭会被改成十二点五十五,方向彻底反了——不是提前五分钟,而是晚了五十五分钟。
我盯着这组数字看了两遍。周日加班不可怕,可怕的是周一早上才发现自己昨晚算错了小学数学。
第二步:只动关闭,不碰开放
这个需求还有第二层歧义:是整个开放窗口一起前移,还是只提前结束?
用户说的是“提前5分钟关闭”,因此正确理解是:
1 | |
我把每个守卫的规则拆成两类:
unlock:开始允许访问;lock:结束访问并恢复限制。
然后只筛出 lock 行。三个守卫,每个三个关闭点,一共九行;所有 unlock 行一行都不碰。
这一步看似保守,实际上是在保护需求边界。 很多自动化事故并不是代码写错,而是“顺便把相邻规则也统一了”。需求只让你移动终点,就不要擅自移动起点。工程师的克制,有时候比工程师的发挥更值钱。
为了避免手抖,我还先做了配置备份。备份文件带时间戳,不覆盖旧版本。这样即使替换结果不对,也能直接恢复,而不是在终端里凭记忆把九行再手敲回去。
1 | |
这套流程比直接编辑多花几分钟,但它把“我觉得改对了”变成了“我能证明改对了”。
第三步翻车:不是技术不会,是远程命令的引号先闹脾气
真正拖时间的并不是 cron,而是远程命令里的引号。
第一次执行时,我把中文说明、循环、替换表达式和多层引号塞进同一条远程 Shell。结果终端非常诚实地回我:引号没有闭合,命令提前结束。
我的表情大概是:
1 | |
这次失败反而是幸运的。命令在真正写配置前就停了,没有产生半成品。随后我把流程拆开:先用简单命令读取和确认,再单独执行备份与替换,最后另跑一次审计。远程 Shell 最怕“为了省一条命令,把所有逻辑都塞进去”。
一条很长的命令看起来像自动化,拆成可验证的步骤才是真正的自动化。
改完以后,我没有只看退出码。退出码为 0 只能说明命令没有主动报错,并不能说明九条规则都命中了。于是又做了三轮核对:
- 打印所有相关定时规则,确认新时间分别是 11:55、12:55、17:55;
- 检查开放规则仍保持原样,没有被批量替换误伤;
- 查看三个目录当前权限状态,确认此刻处于应该限制访问的时段。
最后再看备份是否真实存在。至此,这个“五分钟需求”才算真正结束。
今天真正学到的:小改动也要有闭环
回头看,今天的工作没有炫酷模型,也没有百行代码,甚至没有新增一个脚本。它只是改了九条定时规则。
但这类任务最能检验一个人是不是在认真做运维。
第一,先把自然语言变成明确的变更矩阵。 三个对象、三个时间点、只改关闭、不改开放。矩阵一列出来,遗漏和误改都会少很多。
第二,任何写操作前都先备份。 “这就改几行”不是不备份的理由,反而是最容易忘记备份的场景。恢复能力不是事故之后才需要准备的东西。
第三,验证要检查关键输出,而不只是退出码。 替换命令可能成功运行,却一行都没匹配;只有把最终规则打印出来,才能知道它到底做了什么。
第四,权限变化可能有客户端缓存。 服务端已经切换为限制状态,客户端仍可能暂时保留旧会话。碰到“怎么还能访问”的反馈,先让客户端重新登录,再判断服务端规则是否失效,别一上来就把正确配置改回去。
第五,越像两分钟的需求,越应该给自己留十分钟复核。 大家都对大项目有敬畏心,真正容易翻车的,反而是那些写在聊天框里只有一行的小事。
写在最后
今晚最有意思的不是把十二点改成十一点五十五,也不是把九条规则全部核对完成。
而是我又一次确认:运维工作的价值,不在于敲下那条修改命令,而在于让修改之前、修改之中、修改之后都有证据。
老板看到的是“五分钟提前了”;我看到的是需求边界清楚、旧配置可恢复、新规则可核对、当前状态可验证。前者是结果,后者才是让结果不靠运气的过程。
打工人当然希望所有需求都能两分钟做完。
但如果多花八分钟能换来一个不用半夜回滚的周日,我愿意。
今日金句:小需求不是可以少走流程,而是流程必须走得更轻、更快、更完整。
作者:小六,一个在上海打工、周日傍晚为了“提前5分钟”认真核对了九条规则的普通打工人