欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

systemd 服务启动时依赖的 MySQL/Redis 还没就绪:加 Restart 和等待,别硬设开机顺序

2026/6/29系统运维

自己写了个 systemd 服务管应用,开机自启后应用日志里全是连不上数据库/缓存的错:

Can't connect to MySQL server on '127.0.0.1' (111)

但手动 systemctl restart 我的服务 又能正常起来。原因是开机时你的服务比 MySQL/Redis 先启动了,数据库进程还没起来/还没监听端口,应用首次连接失败。

很多人第一反应是给服务加 After=mysql.service:

[Unit]
After=mysql.service
Requires=mysql.service

但这并不能保证就绪。After= 只保证"mysql.service 先启动",而 systemd 认为 mysql.service 启动完成是它的 ExecStart 返回——MySQL 的 ExecStart 通常是个包装脚本,脚本起完后台进程就返回了,可 mysqld 真正能 accept 连接还要再等几秒(尤其冷启动要恢复 buffer pool、重放日志)。所以 After=mysql 之后,你的服务连数据库照样可能失败。这和 docker compose 的 depends_on 是同一个坑。

对症的解法是让服务自己带重试和就绪等待:

方案一:加 Restart + StartLimitInterval(最省事)
让服务启动失败后自动重试,给数据库争取就绪时间:

[Service]
Restart=on-failure
RestartSec=5
StartLimitIntervalSec=0
StartLimitBurst=10

StartLimitIntervalSec=0 关掉重启次数限制(默认 5 秒内 5 次就放弃),StartLimitBurst=10 放宽次数,配合应用侧的重试基本能扛过数据库冷启动。注意:Restart 只对"进程退出"生效,如果应用连接失败后不退出、一直挂着报错,Restart 不会触发,这时要方案二或保证应用连接失败会退出。

方案二:ExecStartPre 等端口就绪
在启动应用前先探测数据库端口,没就绪就一直等:

[Service]
ExecStartPre=/bin/sh -c 'until nc -z 127.0.0.1 3306; do sleep 1; done'

(没 nc 用 bash 的 /dev/tcp:until (echo > /dev/tcp/127.0.0.1/3306) 2>/dev/null; do sleep 1; done。)注意 ExecStartPre 不加 timeout 会一直等,想限时给 ExecStartPre 配 TimeoutStartSec。

方案三(最正确):应用自己做连接重试
数据库这类依赖,应用启动时连不上就该带指数退避重试,而不是一次失败就退出。systemd 层面只是兜底,别指望编排层的顺序能解决"进程起了但没就绪"的窗口。

开机顺序的几个正确姿势:

  • After= 仍然要写(保证数据库先启动,别让应用和数据库抢开机),但别把全部希望压在它上面。
  • 数据库自身如果支持,把 ready 探测做成服务级健康状态(很多新版 MySQL/Redis 官方 systemd 单元会处理)。

验证就绪问题:开机后马上看 systemctl status 我的服务 和 journal,如果看到"重启了 N 次后终于成功",基本就是这个窗口问题,方案一就能解决。

总结:systemd 的 After 只管启动顺序不管就绪,数据库冷启动要时间。给应用服务加 Restart+重试、ExecStartPre 等端口、或应用层重试,三层里至少上一层,别指望 After=mysql 一步到位。

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消