
Linux 生产环境运维不是靠背命令,而是靠对系统行为的理解、对风险的预判和对流程的敬畏。稳定压倒一切,变更必须可控,监控必须前置,日志必须可查。
服务稳定性:从启动到自愈
生产服务不能只靠systemctl start就完事。关键服务必须配置Restart=always、StartLimitIntervalSec和RestartSec,防止进程意外退出后长时间失联。同时用systemctl enable确保开机自启,但更要验证systemctl is-enabled和systemctl is-active的真实状态——有些服务依赖网络或挂载点,需配合WantedBy=multi-user.target或After=network-online.target调整启动顺序。
- 上线前在测试环境完整走一遍重启流程,观察服务恢复时间与依赖就绪顺序
- 禁用所有非必要ExecStartPre脚本,避免启动卡死在某个检查环节
- 用journalctl -u service-name -f实时跟踪启动日志,比ps aux | grep更可靠
磁盘与IO:别等No space left on device才行动
根分区爆满是生产事故高频原因,但真正棘手的是inodes耗尽——df -i必须和df -h一起看。/var/log/下旧日志、/tmp中残留临时文件、容器未清理的overlay层、rsync中断留下的.~临时文件,都可能悄悄吃光inodes。
- 对/var/log启用logrotate并配置maxsize和rotate,禁用copytruncate(有丢失日志风险)
- 用find /tmp -type f -mtime +7 -delete加cron定期清理,但先-print确认范围
- 排查IO瓶颈优先看iostat -x 1中的%util和await,而不是只盯top里的CPU
权限与安全:最小化不是口号
运维账号不用root,应用进程不跑root,SSH不用密码登录——这三条是底线。生产机禁用PermitRootLogin yes,改用普通用户+sudoers白名单;数据库、中间件配置文件权限设为640,属主为运行用户,属组为管理组;/etc/shadow必须是000,/etc/passwd保持644即可。
- 用visudo编辑sudoers,禁止写ALL=(ALL) NOPASSWD: ALL这种万能句式
- 敏感配置(如DB密码)从不硬编码进systemd unit文件,改用EnvironmentFile并限制该文件权限
- 定期执行rpm -Va(CentOS/RHEL)或dpkg --verify(Debian/Ubuntu)校验系统二进制完整性
变更与回滚:每次操作都是可逆的
没有“小修改”。哪怕只是改一行nginx配置,也要走完整流程:备份原文件(带时间戳)、用nginx -t验证语法、systemctl reload而非restart、5分钟内观察监控曲线和错误日志。线上紧急修复优先用patch或sed -i.bak,保留原始副本;批量更新用ansible --check --diff预演,确认无误再执行。
- 所有变更记录进内部CMDB或简单文本日志,包含操作人、时间、变更内容、验证方式
- 核心服务升级前,先在灰度节点部署,观察至少一个业务高峰周期
- 数据库结构变更必须配回滚SQL,且在从库上先验证执行耗时与锁表现










