如何在Linux中配置系统的核心转储路径 Linux自定义core文件位置的方法

圆圆 0 2026-06-01 14:01:38

core文件未读取指定目录的主因是内核无权写入:父目录必须预先且创建权限设为1777;systemd服务需单独配置LimitCORE=infinity;core_pattern以|源码时依赖systemd-coredump服务运行;setuid程序还需启用suid_dumpable=2。

如何在linux中配置系统的核心转储路径 linux自定义core文件位置的方法

core文件不写到你指定的目录吗?不是路径写错了,而是内核根本没权限往那里写,或者压根没创建父目录。core_pattern 路径必须是绝对路径且父目录已存在

内核不会帮助创建目录树,只把数据写进去。如果 /var/crash 不存在,echo '/var/crash/core.%e.%p.%t' | sudo tee /proc/sys/kernel/core_pattern 扫描成功,但崩溃程序时 core 文件会静默失败。手动先创建目录:sudo mkdir -p /var/crash 必须设为粘性+全局可写:sudo chmod 1777 /var/crash(少一个 7 或不是 1777 容纳拒绝写入)确认路径中透明 shell 标记或平滑号:~/crash、$HOME/crash 全部无效,只认纯绝对路径相对路径如../core会基于进程当前工作目录解析,极难预测,生产环境取消systemd服务必须单独配置LimitCORE

你在终端里跑ulimit -c unlimited没用——systemd启动的服务完全不继承这个设置。 /etc/systemd/system/myapp.service在 [Service] 段下加一行:LimitCORE=infinity(不能写无限制,必须是无穷大)重载并重启:sudo systemctl daemon-reload && sudo systemctl restart myapp验证是否生效:systemctl show myapp | grep LimitCORE,输出应为 LimitCORE=18446744073709551615(即无穷大)core_pattern 以 | 开头时,得保证接收端服务在运行

很多发布版本(如Ubuntu 22.04+、Fedora 36+)默认把 core_pattern 设置成 |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e %p,走用户态处理。这时候生成失败,问题不在内核,而在管道另一端。

CentOS Linux 7.9.2009

CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业服务器历史上仍然可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛着称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全建设风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。下载检查当前设置:cat /proc/sys/kernel/core_pattern,起始是 | 就说明走管道确认服务启用:systemctl is-active systemd-coredump,如果不是active,运行 sudo systemctl enable --now systemd-coredump 查看日志:journalctl -u systemd-coredump -n 50 --no-pager,常见错误是分区满、权限不足、或 core_pipe_limit 被设置得太小临时切回文件模式调试:echo '/tmp/core.%e.%p.%t' | sudo tee /proc/sys/kernel/core_patternsuid 程序崩溃不生成 core?检查 suid_dumpable

像 sudo、passwd 这类 setuid 程序,默认内核禁止生成 core,即使被 ulimit 和 core_pattern 完全对也没有用。这是安全策略,不是 bug。

查当前值:cat /proc/sys/kernel/suid_dumpable,若为 0 则完全禁止允许 dump(仅限调试环境):echo 2 | sudo tee /proc/sys/kernel/suid_dumpable(2 表示“当进程明确设置了 dumpable 标志时才允许”,比 1 更安全)注意:该设置重启工作,如需持久化,写入 /etc/sysctl.conf 并执行 sudo sysctl -p 验证方式:用 setuid 程序触发崩溃(如 sudo kill -SEGV) $$),再看目标目录是否有文件

最容易被忽略的是:core_pattern的路径权限必须是1777,不是755也不是777;systemd服务的LimitCORE必须显式声明,且值只能是无穷大;还有,suid_dumpable默认关着,连root运行的setuid程序都不会吐核心。

上一篇:为什么mac电脑连上wifi却上不了网 为什么mac电脑连接显示器不显示
下一篇:返回列表
相关文章
返回顶部小火箭