Linux运维老手也常踩的5个Unix环境搭建坑
|
凌晨三点十七分,告警声像指甲刮黑板,第七次。我盯着屏幕右下角跳动的「ssh: connect to host jump02 port 22: Connection refused」,手还在抖——不是因为困,是刚把咖啡泼在工牌上,那圈深褐色渍边儿已经干硬翘起来了,蹭得脖子痒。 去年春节,大年初二,DBA老周在群里甩了句「库连不上了,你看看跳板机」,我就知道又来了。不是第一次,也不是第五次。是第十七次。这五个坑,老手栽得比新人还埋得深——因为压根不信自己会踩。
文章配图,仅供参考 第一个:/etc/hosts 里写死 IP 后改了网段,却忘了清 systemd-resolved 缓存,也不 reload,就 reboot 硬顶。我原以为重启能刷掉所有鬼东西,结果 root@prod-app3 连了三分钟才认出新 DNS,期间三百七十二条告警堆成山,后端小张在语音里喊「缓存穿透了」,我说「你先别穿,我连不上」,他笑了两声,手机没挂,但空调突然嗡的一声,响得比告警还长。 第二个:alias ls='ls --color=auto' 写进 /root/.bashrc,顺手 copy 到所有节点,结果某台 CentOS 7 的机器 ls 报错卡死——因为那个版本的 coreutils 没 compile --color 支持。我删了 alias,加了 -G 参数,还是卡;最后发现是它 shell 启动时读了 /etc/profile.d/colorls.sh,而那个脚本里 export LS_COLORS=... 末尾多了一个空格,导致整个变量解析崩掉。这个我敢打包票,空格不是 tab,是中文全角空格。谁配的?不知道。谁测的?没测。谁上线的?我们仨一起点的回车。 第三个:firewalld 关了,但 iptables-legacy 规则还在跑。你用 systemctl stop firewalld,systemctl disable firewalld,再 netstat -tlnp 一看,端口开着,就信了。我信了。结果半夜 DBA 老周连不上 Redis,说「端口监听着啊」,我登上去看,ss -tlnp | grep 6379 确实有,可 telnet 就是超时——直到我看见 /proc/1234/net/nf_conntrack 里满屏 INVALID 状态。iptables-legacy 走的是 legacy path,firewalld 停了它不管。你得 flush,得 service iptables stop,还得检查有没有被 ansible playbook 在 post_task 里悄悄 restart 了一次。这个我说不准,反正那天我删了三遍规则,第四遍才想起看 init.d 里那个 iptables 服务名是 iptables-old,不是 iptables。 对面工位老李换了一双拖鞋,左脚蓝右脚灰,鞋带系得歪,走路啪嗒啪嗒,声音不大,但每一声都像敲在我太阳穴上。他说「你这配置该上 git」,我说「上过了,上次提交是三年前」,他嗯了一声,没接。其实我删过两次本地 git repo,怕误推脏配置,现在全靠 diff + tar 手动打补丁。不体面,但安全。 第四个:locale 设置写进 /etc/environment,但某些容器启动时忽略它,偏偏某个 Java 应用 parse 时间戳失败,抛出 java.time.format.DateTimeParseException,报错堆栈第一行就是「Text '2024-02-11T13:27:18.442Z' could not be parsed」。不是格式不对,是 LC_TIME=en_US.UTF-8 导致 SimpleDateFormat 解析器用了美式习惯,把 Z 当成了时区缩写(而它其实是 UTC 标识)。我们折腾了十八秒,在 JVM 参数里硬加 -Duser.timezone=UTC —— 成了。但没人记得,第二天部署新集群时,又漏了。这种坑最气人:你查日志查三小时,最后改一行参数,重启,好了。就像打火机没油,你拆了半台,才发现只是没按下去。 第五个:用 scp 传配置文件时,加了 -p 保权限,结果目标机上 .ssh/config 文件权限变成 644,ssh-agent 死活不肯读。你 chmod 600,再 ssh,还是 Permission denied (publickey)。你以为密钥坏了,重生成两轮;最后发现是 ~/.ssh 目录本身权限是 755,ssh 客户端直接拒载 config 文件。OpenSSH 源码里写得清清楚楚:if (st.st_mode & 077) die。你得 chmod 700 ~/.ssh,再 chmod 600 ~/.ssh/config,缺一不可。我试了四遍,第四遍才翻到 openssh-portable/src/readconf.c 第 182 行注释,写着「strict permissions enforced since OpenSSH 6.8」。这个版本,是六年前的事了。 值班表下周开始轮我夜班,周三到周五。调休申请上周五交的,今天上午系统提示「驳回:调休理由不充分」。我没写理由,就填了「家庭事务」四个字。后来想起来,上周三晚上我还替 DBA 老周值了半宿,他孩子发烧住院,我接了他电话就去了机房,临走他塞给我一盒喉糖,薄荷味的,现在还在我抽屉第二格。没拆。 优胜劣汰?对。但淘汰的不是能力,是耐心。是那个你刚确认过「防火墙肯定关了」、转身去喝水上厕所、回来发现其实它只是换了名字还在后台咬人的耐心。是凌晨三点你蹲在服务器前面等一个 rsync 同步完成,却因为 target 目录下有个隐藏的 .snapshot 子目录,导致 du 统计错误、磁盘爆满、整个同步卡死的耐心。这种耐心,十年老手比五年新人掉得还快。快到你都不记得上一次手动验证 /proc/sys/net/ipv4/ip_forward 是否为 1 是什么时候了——反正,昨天没验。 我现在打开终端,输 ssh -o ConnectTimeout=3 -o BatchMode=yes root@jump02,按回车之前,先抬手摸了摸工牌上的咖啡渍。硬了。下次倒咖啡,换左手。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


模块化建站:11年运维工程师揭秘高效搭建术
18年原生工程师力荐:MySQL实战手册,设计运维一册通
鸿蒙开发者必学的MySQL运维设计实战
你的网站还在用点击跳转?11年运维工程师告诉你该升级了
鸿蒙工程师跨界创业:11年运维老兵的资源整合实战
嵌入式Linux开发者Unix环境搭建避坑指南
Unix高效包管理:创业者必备的云时代技术基石