ubuntu server 20.04 systemd服务如何生成core文件

最近服务挂了,毛都没给我留下。明明配置ulimit -c unlimited,而且还特地在  .bashrc 中加入。被ubuntu server 20.04的core生成机制给坑了一把。

首先查看服务的core file size到底是个啥。cat /proc/服务进程的pid/limits ,发现这个服务的Max core file size的Soft Limit 是0。果然是0。

经过查询发现,全局设置的limit对systemd服务进程不起毛作用,有效设置是在 服务.service 文件中配置。样例如下:

[Unit]
Description=A login service
After=network.target 

[Service]
Type=simple
LimitCORE=infinity
LimitNOFILE=65536
Restart=always
ExecStart=/home/so/login_server.out

[Install]
WantedBy=multi-user.target

其中的LimitCORE=infinity 就是core file size 的Soft Limit设置为unlimited。LimitNOFILE=65536设置的是Max open files。可设置参数如下:

Directive        ulimit equivalent     Unit
LimitCPU=        ulimit -t             Seconds      
LimitFSIZE=      ulimit -f             Bytes
LimitDATA=       ulimit -d             Bytes
LimitSTACK=      ulimit -s             Bytes
LimitCORE=       ulimit -c             Bytes
LimitRSS=        ulimit -m             Bytes
LimitNOFILE=     ulimit -n             Number of File Descriptors 
LimitAS=         ulimit -v             Bytes
LimitNPROC=      ulimit -u             Number of Processes 
LimitMEMLOCK=    ulimit -l             Bytes
LimitLOCKS=      ulimit -x             Number of Locks 
LimitSIGPENDING= ulimit -i             Number of Queued Signals 
LimitMSGQUEUE=   ulimit -q             Bytes
LimitNICE=       ulimit -e             Nice Level 
LimitRTPRIO=     ulimit -r             Realtime Priority  
LimitRTTIME=     No equivalent

至此,服务进程已经满足生成core的条件。但是到这依然毛都生成不了。

 

ubuntu的操蛋服务apport.service。自动生成崩溃报告,官方为了自动收集错误的。这个玩意会导致core_pattern的设置不能一直有效,只要这个服务存在,系统重新启动后就会把core_pattern改为一个特定的值,直接导致coredump无法生成。

这个服务对我们来说,基本没用,所以直接disable。修改 /etc/default/apport文件,enabled 设置为0。

最后设置core_pattern为固定值即可生成coredump。在 /etc/sysctl.conf 文件, 加入

kernel.core_pattern = /var/crash/core-%e-%p-%s

可设置参数如下:

%p - insert pid into filename 添加pid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号 
%g - insert current gid into filename 添加当前gid 
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号 
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间 
%h - insert hostname where the coredump happened into filename 添加主机名 
%e - insert coredumping executable name into filename 添加名字

上述设置中coredump生成目录在/var/crash,名称为core-服务进程名字-pid-导致产生core的信号。执行sudo sysctl -p, 使/etc/sysctl.conf配置生效,最后查看cat /proc/sys/kernel/core_pattern 是 /var/crash/core-%e-%p-%s

搞定

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值