random: crng init 延迟的 rng-tools 服务启动顺序调整
发布时间 - 2026-01-29 00:00:00 点击率:次rng-tools 启动延迟因过早尝试向未就绪的 /dev/random 注入熵所致,应通过 systemd 依赖 systemd-random-seed-load.service 确保等待 crng init done 信号后再启动。
为什么 rng-tools 启动时总报 crng init done 延迟?
Linux 内核在完成 CSPRNG(crng)初始化前,会阻塞对 /dev/random 的阻塞式读取。而 rng-tools 默认启动时立即尝试向 /dev/random 注入熵,若此时内核尚未输出 random: crng init done,服务就会卡住或反复重试,表现为启动超时、Failed to start rng-tools.service 或日志里持续出现 failed to read from entropy source。
如何让 rng-tools 等到 crng init done 再启动?
关键不是“延迟几秒”,而是等待内核明确就绪信号。推荐用 systemd 的 After=systemd-random-seed-load.service + Wants=systemd-random-seed-load.service,因为该 service 本身已定义了 ExecStartPost=/bin/sh -c 'while ! grep -q "crng init done" /proc/sys/kernel/random/entropy_avail 2>/dev/null; do sleep 0.1; done' 类似逻辑(实际由内核导出的 /proc/sys/kernel/random/crng_ready 或 ent 判断)。
实操建议:
- 编辑
/etc/systemd/system/rng-tools.service.d/wait-for-crng.conf(新建目录和文件) - 写入以下内容:
[Unit] After=systemd-random-seed-load.service Wants=systemd-random-seed-load.service
然后执行 systemctl daemon-reload && systemctl restart rng-tools
rng-tools 启动失败时该查哪些日志和状态?
不要只看 journalctl -u rng-tools,容易漏掉前置依赖。必须组合检查:
-
journalctl -b | grep -i "random\|crng"—— 找最早一条random: crng init done出现时间 -
cat /proc/sys/kernel/random/crng_ready—— 返回1表示就绪,0表示未就绪(比entropy_avail更直接) -
systemctl list-dependencies --reverse rng-tools.service—— 确认是否真依赖了systemd-random-seed-load - 如果用了
rngd -f -r /dev/hwrng手动运行,注意加-q(quiet)避免干扰判断,且-r指定的设备必须真实存在(ls /dev/hwrng*验证)
ARM 平台或无硬件 RNG 的机器要特别注意什么?
这类机器往往熵池填充慢,crng init done 可能晚于所有用户空间服务启动完成。单纯靠 After= 不够,还需补充熵源:
- 确认内核编译启用了
CONFIG_RANDOM_TRUST_CPU=y(Intel/AMD)或CONFIG_RANDOM_TRUST_BOOTLOADER=y(ARM),否则即使有 CPU RNG 也不会被信任 - 安装
haveged作为软件熵源:它不依赖crng就能工作,且会主动唤醒内核熵池;但注意不能和rng-tools同时喂同一个设备(如都往/dev/random写),否则可能冲突 -
rng-tools的/etc/default/rng-tools中,RNGDOPTIONS="--hrng-device=/dev/hwrng --fill-watermark=90%"这类配置在无硬件设备时会导致启动失败,务必注释或删掉--hrng-device
最常被忽略的是:crng init done 不代表熵值高,只代表密钥已生成、可安全阻塞读取。低熵环境仍需持续喂入,但服务启动那一刻,等这个信号就够了。
# linux
# ai
# amd
# 为什么
# NULL
# for
# while
# default
# 这类
# 启动时
# 的是
# 就会
# 就能
# 不代表
# 只代表
# 用了
# 那一刻
# 只看
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
IOS倒计时设置UIButton标题title的抖动问题
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel如何发送系统通知?(Notification渠道示例)
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何处理和验证JSON类型的数据库字段
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
黑客入侵网站服务器的常见手法有哪些?
Laravel如何使用模型观察者?(Observer代码示例)
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
在线制作视频的网站有哪些,电脑如何制作视频短片?
手机网站制作与建设方案,手机网站如何建设?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何创建自定义中间件?(Middleware代码示例)
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
制作电商网页,电商供应链怎么做?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
javascript日期怎么处理_如何格式化输出
JS经典正则表达式笔试题汇总
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel怎么使用Intervention Image库处理图片上传和缩放
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
nodejs redis 发布订阅机制封装实现方法及实例代码
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何在服务器上配置二级域名建站?
iOS中将个别页面强制横屏其他页面竖屏
香港服务器WordPress建站指南:SEO优化与高效部署策略
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
浅谈javascript alert和confirm的美化
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何在IIS中新建站点并配置端口与IP地址?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】

