You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为退出状态为SEGV的systemd服务启用核心转储生成

解决systemd服务SEGV无法生成核心转储的问题

你已经搞定了普通程序的核心转储,但systemd服务的运行环境和终端会话完全是两回事——你bashrc里的ulimit -c unlimited对systemd管理的服务根本不起作用,因为systemd有自己一套独立的资源限制规则。下面是一步步解决的方法:

1. 为目标服务配置核心转储限制

systemd服务的资源限制需要在服务配置里明确设置,推荐用systemctl edit来添加覆盖配置,这样不会修改原始的服务文件:

  • 执行命令打开服务的override配置:
    sudo systemctl edit scd.service
    
  • 在打开的编辑器中,添加以下内容:
    [Service]
    LimitCORE=infinity
    
  • 保存并退出编辑器。

2. 重新加载配置并重启服务

让systemd读取新的配置,然后重启服务使设置生效:

sudo systemctl daemon-reload
sudo systemctl restart scd.service

3. 检查全局核心转储配置(可选但推荐)

如果还是没生成核心转储,需要确认systemd-coredump的全局配置是否允许保存转储:

  • 编辑/etc/systemd/coredump.conf文件:
    sudo nano /etc/systemd/coredump.conf
    
  • 找到Storage选项,确保设置为external或者journal+external(external会把转储保存到/var/lib/systemd/coredump目录,方便后续分析):
    [Coredump]
    Storage=external
    
  • 保存后重启systemd-coredump服务:
    sudo systemctl restart systemd-coredump.service
    

4. 验证核心转储生成

等服务再次因SEGV崩溃后,执行以下命令查看是否有转储:

coredumpctl list scd
# 或者查看详细信息
coredumpctl info scd

补充说明

终端会话的ulimit是shell进程的设置,而systemd服务是由systemd直接启动的,不会继承用户shell的环境变量和资源限制。systemd默认对服务的核心转储大小限制可能是0,所以必须显式在服务配置中开启。

内容的提问来源于stack exchange,提问作者Yashgiri Goswami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:30:53