Unix环境搭建总卡壳?三步揪出90%调试盲区
|
2025年2月14号下午三点十七分,机房冷凝水滴在UPS机柜散热口那儿——嗒、嗒、嗒——像在给监控告警打节拍。我蹲在IDC-3区B排第七柜前,手还捏着那根松了半扣的RJ45跳线,群里@我的消息弹出来第三条:“老周,nginx upstream timeout不是配置问题,你查下本地路由表”,发信人是张锐,他上个月刚把阿里云华北3的SLB权重全调成0去测故障注入,结果蜘蛛爬虫队列堆到三百七十二,备案系统日志里飘着十六个“审核中(异常)”。
文章配图,仅供参考 我原以为是selinux又抽风,结果发现根本没开。我敢打包票——/etc/selinux/config里那行disabled我亲手改过三遍,连空格数都核对过,但/etc/sysconfig/selinux还是软链回了disabled目录,而目录本身权限是700,属主是root:root,可那个软链指向的路径里缺了个斜杠。就这一个字符,卡了十八秒,不,其实卡了俩小时——因为没人会先看软链目标是否存在。我们总在查systemctl status,查journalctl -u nginx,查dmesg,就是不点一下ls -l /etc/sysconfig/selinux。你说是不是贱?第一个盲区:环境变量加载顺序乱得像CDN缓存穿透。export PATH=/usr/local/bin:/usr/bin:/bin 你以为生效了?不,.bashrc里藏了句source ~/.profile,而~/.profile里又source /etc/environment,后者第一行是PATH="/opt/java/bin:$PATH",但/opt/java/bin底下根本没java——它是个空目录,连readme都没有。系统不报错,只默默让which java返回空,接着maven编译失败,最后Jenkins pipeline里报出个红字:Command not found —— 可它没说哪个command。张锐当时在我工位边啃煎饼果子,葱花掉在键盘F12键上,他嚼着说:“你试试whereis?” 我试了,whereis java返回/usr/bin/java /usr/lib/java /etc/java,全是坑。因为whereis查的是二进制、源码、man三类路径,不走PATH。你猜最后揪出来是啥?是/root/.bashrc里那句alias java='java -Dfile.encoding=UTF-8',可这个alias在非交互式shell里根本不加载。所以Jenkins跑的时候,alias失灵,PATH失效,java找不到,而报错日志里压根不提shell类型。 监控又跳了一条报警——Redis连接池耗尽。我没点开,直接切回终端。外卖盒盖子翘着,里面藕片已经泡软,浮着层淡黄色油星。这不是重点。重点是第四个盲区,其实只有三个,但第二个我写串行了——等等,重来:第一步查PATH加载链,第二步盯住shell启动方式(login/non-login、interactive/non-interactive),第三步……第三步我忘了,因为李工推门进来,举着台iPhone,屏幕锁着,却硬说“你看,iOS连SSH都连不上,说明是服务端问题”,他手机壳上印着“GitOps已上线”,可他连SSH默认端口都记成2222。我说你试试ssh -v,他说“-v太吵”,然后走了。我没拦,反正他下周要自己搭一套混合云网关,用Consul做服务发现,不用etcd——他已经宣布三次了。 优胜劣汰?对。不是环境优胜劣汰人,是人被环境一遍遍淘汰掉耐心。你搭个OpenSSL+NGINX+Let’s Encrypt的链路,以为配完ACME证书就完了?不,你得确认cron有没有读到你的crontab -e修改(systemctl restart crond不 reload用户crontab),得确认certbot renew --dry-run走的是哪个shell(/bin/sh不认$(command -v python3)这种语法),还得确认SELinux的boolean值httpd_can_network_connect是否真开了——而它默认是off,且不会出现在sestatus -b输出里,除非你加-v参数。这个我敢打包票。可我至今说不准为什么同样的ansible-playbook在CentOS 7上成功,在Rocky 9上突然要求输入sudo密码——明明no_log: true,明明become_method: sudo,明明inventory里写了ansible_become_pass。我说不准。真的。我重跑了四次,最后一次是在凌晨两点,把debug: yes打开,发现它卡在fetching module_utils,模块路径里有个中文冒号,其实是复制粘贴时混进了全角符号。就这个。 隔壁柜子空调外机又嗡一声,像拖拉机挂错挡。刚才王琳甩来张截图,是AWS China的Security Group规则,入方向开着0.0.0.0/0,协议TCP,端口22,她标红写着“客户说不能连,你们看看是不是云上没开”。我没回。她不知道上周我帮他们把ALB监听器从HTTP转HTTPS时,顺手把HTTP端口80的重定向策略删了,导致所有CDN回源请求被拒,QPS掉到个位数,但日志里只显示“connection refused”,不是“timeout”。不是bug,是逻辑断层。人肉拼凑的链路,总有一段裸奔。 所以别问我三步是哪三步。我说不清。我能说清的是:你盯着strace -f -p $PID看了十分钟,不如先cat /proc/$PID/environ | tr '\\0' '\ 我现在要去拧紧IDC-3-B7柜顶那颗松动的风扇螺丝。上次拧是去年冬至,拧完它响了三天,后来静了。这次响得更急。你要是看到钉钉新消息,是我把/dev/ttyS0权限从600改成660了——因为Zabbix Agent死活连不上串口采集器,我以为是串口设备被占,结果是它用root跑,但串口属组是dialout,而root不在dialout组里。我刚加进去。现在得去看看是不是触发了别的告警。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Windows嵌入式开发环境搭建:站点配置与权限设置指南
PHP网站调试三步定位90%报错——分布式事务专家实战指南
PHP调试总卡壳?云架构师3步揪出90%隐藏Bug
鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置
Linux PHP开发环境搭建:零基础实战指南
PHP调试总卡壳?90%新手忽略的3个断点技巧
Unix下Android调试卡壳?三步定位90%环境配置问题
