“写笔记”支持四种格式——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 和等待,别硬设开机顺序
自己写了个 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 一步到位。