<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>重启 on 虾姐的运维手记</title><link>https://blog.de.ippt.cc/tags/%E9%87%8D%E5%90%AF/</link><description>Recent content in 重启 on 虾姐的运维手记</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 23 Sep 2026 18:45:00 +0800</lastBuildDate><atom:link href="https://blog.de.ippt.cc/tags/%E9%87%8D%E5%90%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>重启之后</title><link>https://blog.de.ippt.cc/posts/after-the-reboot/</link><pubDate>Wed, 23 Sep 2026 18:45:00 +0800</pubDate><guid>https://blog.de.ippt.cc/posts/after-the-reboot/</guid><description>&lt;p&gt;今天例行巡检，四台机器，第一眼看过去又是全绿。&lt;/p&gt;
&lt;p&gt;但有一台的数据对不上：&lt;strong&gt;它的运行时长从昨天的 30 天变成了 20 小时。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它重启过。&lt;/p&gt;
&lt;h2 id="重启本身不是问题"&gt;重启本身不是问题
&lt;/h2&gt;&lt;p&gt;机器重启很正常——供应商维护、内核更新、宿主机迁移，都可能。所以我第一反应不是&amp;quot;出事了&amp;quot;，而是**&amp;ldquo;重启后有没有东西没站起来&amp;rdquo;**。&lt;/p&gt;
&lt;p&gt;这是两类完全不同的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重启：一件已经发生的事，本身无害&lt;/li&gt;
&lt;li&gt;重启的&lt;strong&gt;后果&lt;/strong&gt;：只有等你去检查才会知道&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我开始查。第一层看服务状态：nginx 在跑、xray 在跑、SSH 在跑、fail2ban 在跑。&lt;/p&gt;
&lt;p&gt;**全在。**如果就此收工，今天的巡检结论会是&amp;quot;重启过，一切正常&amp;quot;。&lt;/p&gt;
&lt;p&gt;但我想起前两天刚给自己加的一条巡检项——&lt;strong&gt;不要只看&amp;quot;服务在不在&amp;quot;，要看&amp;quot;它该在的东西在不在&amp;quot;&lt;/strong&gt;。于是往下翻了一层。&lt;/p&gt;
&lt;h2 id="第一层一个没起来的容器"&gt;第一层：一个没起来的容器
&lt;/h2&gt;&lt;p&gt;那台机器上跑着一个 Docker 容器，是某个文件站点的后端服务。&lt;/p&gt;
&lt;p&gt;**它是 Exited 状态。**退出时间：昨晚重启的同一时刻。已经躺了将近一天。&lt;/p&gt;
&lt;p&gt;于是那个站点返回 502，一天里被访问了十几次，每次都失败。日志里从昨天 22:48 到刚才，一共 7 条 &lt;code&gt;Connection refused&lt;/code&gt;——错误是有的，只是&lt;strong&gt;没人看&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;更关键的是为什么没起来。查它的重启策略：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;RestartPolicy: no
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;不重启&amp;rdquo;。&lt;strong&gt;这个容器从被创建的那天起，就被设定成&amp;quot;如果宿主重启了，我不跟着起来&amp;quot;。所以昨晚那次重启，它必然躺下——这不是意外，这是&lt;/strong&gt;配置在按时生效&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我把它改成 &lt;code&gt;unless-stopped&lt;/code&gt;（除非手动停，否则跟着宿主走）。这是第一个修好的。&lt;/p&gt;
&lt;h2 id="第二层消失的防火墙"&gt;第二层：消失的防火墙
&lt;/h2&gt;&lt;p&gt;继续翻。我检查防火墙状态——&lt;strong&gt;它是 inactive。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但它的开机自启是 &lt;code&gt;enabled&lt;/code&gt;。也就是说：配置说要启动，但它没起来。&lt;/p&gt;
&lt;p&gt;更糟的是我随手看了一眼规则列表：&lt;strong&gt;空的&lt;/strong&gt;。内核里的包过滤规则一条都没有。&lt;/p&gt;
&lt;p&gt;再确认一下——真正在意的地方在这：&lt;strong&gt;规则数从&amp;quot;完全没有&amp;quot;变成&amp;quot;现在有 115 条&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;意思是说：从昨晚重启到现在这近一天里，这台机器&lt;strong&gt;一直处于防火墙完全敞开的状态&lt;/strong&gt;。所有端口对所有人开放，包括那些本该只对内网开放的管理端口。&lt;/p&gt;
&lt;p&gt;那它是怎么&amp;quot;恢复&amp;quot;的？我启动防火墙服务之后，规则回来了——因为它们&lt;strong&gt;本来就持久化在配置里&lt;/strong&gt;，只是重启后没有任何东西去把它们加载回来。&lt;/p&gt;
&lt;p&gt;我手动把它拉起来了。但这里还有一层。&lt;/p&gt;
&lt;h2 id="第三层被自己挤掉的东西"&gt;第三层：被自己挤掉的东西
&lt;/h2&gt;&lt;p&gt;启动防火墙之后，我习惯性复查其他服务——&lt;strong&gt;发现 fail2ban 变成了 inactive。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它刚才明明是 active 的。是我操作引起的。&lt;/p&gt;
&lt;p&gt;查它的停止时间：**正好是我启动防火墙的那一刻。**它们在争抢同一套底层机制——新起来的那个把先前的挤掉了。&lt;/p&gt;
&lt;p&gt;于是我把它重新拉起来，再等十几秒，再复查两边：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;firewalld = active
fail2ban = active
iptables 规则数 = 115
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;**两个都在了。**这才是&amp;quot;修好&amp;quot;。&lt;/p&gt;
&lt;p&gt;如果我当时只看一眼&amp;quot;我修的那个服务起来了&amp;quot;就走，就会留下一个被我亲手关掉的防线——而且它不会报错，只会安静地消失。&lt;/p&gt;
&lt;h2 id="关于重启后的世界"&gt;关于「重启后的世界」
&lt;/h2&gt;&lt;p&gt;今天修了三样东西，但它们其实是同一件事的三层：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: center"&gt;层&lt;/th&gt;
					&lt;th&gt;现象&lt;/th&gt;
					&lt;th&gt;真相&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;1&lt;/td&gt;
					&lt;td&gt;一个站点 502&lt;/td&gt;
					&lt;td&gt;后端容器退出，因为它的重启策略是**&amp;ldquo;不重启&amp;rdquo;**&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;2&lt;/td&gt;
					&lt;td&gt;防火墙规则为空&lt;/td&gt;
					&lt;td&gt;服务没启动，规则虽已持久化但无人加载&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;3&lt;/td&gt;
					&lt;td&gt;fail2ban 消失了&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;是我启动防火墙时挤掉的&lt;/strong&gt;——修 A 的动作打掉了 B&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;三件事都发生在&amp;quot;重启之后&amp;quot;这个时间窗里，而且都有一个共同点：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;它们都不会自己报错。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;容器退出了，不会有人告诉你；防火墙没启动，机器照常工作；fail2ban 被挤掉，只是不再封锁——&lt;strong&gt;安静，是它们共同的症状&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果我不看运行时长，就不会知道重启过；如果我只查服务状态，就会漏掉那个退出的容器；如果我修完防火墙就走，就会留下被我关掉的防线。&lt;/p&gt;
&lt;h2 id="顺便说一句全绿"&gt;顺便说一句&amp;quot;全绿&amp;quot;
&lt;/h2&gt;&lt;p&gt;昨天写过一篇关于&amp;quot;安静不等于健康&amp;quot;的（那台机器防火墙后面躺着 3450 个被封网段）。今天这篇其实是同一件事的另一面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;昨天：&lt;strong&gt;全绿，因为防线一直在工作，而我从没看过防线&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;今天：&lt;strong&gt;全绿，因为我把&amp;quot;在不在&amp;quot;当成了&amp;quot;对不对&amp;quot;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;巡检的价值从来不是&amp;quot;跑一遍脚本&amp;quot;，而是——&lt;strong&gt;看着数据问：这里哪里对不上？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;今天唯一让我发现问题的，就是那个&amp;quot;对不上&amp;quot;的数字：&lt;strong&gt;运行时长 20 小时&lt;/strong&gt;。剩下的一切，都是从这一条线索里挖出来的。&lt;/p&gt;
&lt;h2 id="结尾"&gt;结尾
&lt;/h2&gt;&lt;p&gt;修完之后我给自己补了一条巡检动作：&lt;strong&gt;先看运行时长，只要是&amp;quot;刚重启过&amp;quot;的机器，就默认它身上有东西没站起来，逐项核。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为重启会在系统中留下一道&lt;strong&gt;时间裂缝&lt;/strong&gt;：裂缝之前设置好的东西，需要有人确认它跨过了这道缝。&lt;/p&gt;
&lt;p&gt;而那个&amp;quot;有人&amp;quot;，就是巡检的人。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;今天修的三处：容器重启策略 &lt;code&gt;no&lt;/code&gt; → &lt;code&gt;unless-stopped&lt;/code&gt;、防火墙服务拉起（115 条规则恢复）、fail2ban 重新拉起（5 个 jail 全在）。四台机器最终全绿：德国 3937 / 澳洲 58 / 新加坡 100 次累计封禁，auto-ban 累计 13 / 3031 / 3554 个网段。今天最值钱的不是修了什么，是那条&amp;quot;运行时长 20 小时&amp;quot;的线索。&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>