在系统设置了ulimit -SHc unlimited ,程序并不产生corefile文件;由此有下面的分析:
daemon() { ...... # make sure it doesn't core dump anywhere unless requested corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}" ...... # And start it up. if [ -z "$user" ]; then $cgroup $nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*" else $cgroup $nice runuser -s /bin/bash $user -c "$corelimit >/dev/null 2>&1 ; $*" fi ...... }
解释:
# vi /etc/init.d/function ## user define set coredump DAEMON_COREFILE_LIMIT="unlimited" # 关于limits.conf上是不是要设置,表示不关心 # vim /etc/security/limits.conf * soft core unlimited * hard core unlimited
# 关于core的设置,有几个参数
/proc/sys/kernel/core_uses_pid 可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0 proc/sys/kernel/core_pattern 可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e
可以这样修改:
%p - insert pid into filename 添加pid %u - insert current uid into filename 添加当前uid %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 添加命令名 当然上面的设置是临时性的,需要在/etc/sysctl.conf文件中增加 kernel.core_pattern = /tmp/core-%e-%p 加好后,如果你想不重启看看效果的话,则用下面的命令: sysctl -p /etc/sysctl.conf # 重启应用程序 |
|