如何获得由init.d启动到Ubuntu的coredump的守护进程? 这是我迄今为止所做的…
echo "ulimit -c unlimited" >> /etc/profile mkdir /corefiles/ chmod 777 /corefiles/ echo "kernel.core_pattern=/corefiles/core.%e.%u.%t" >> /etc/sysctl.conf echo "fs.suid_dumpable=1" >> /etc/sysctl.conf echo "kernel.core_uses_pid = 1" >> /etc/sysctl.conf sysctl -p
这对于除bootd启动时由init.d启动的守护进程以外的所有应用都很有效。 我正在运行Ubuntu 10.04。 我正在寻找一个解决scheme,不涉及编辑每个守护进程的init.d文件。
编辑:另外,守护进程开始与sudo不coredump。
为什么不使用Apport ? 默认情况下,它在Ubuntu的非开发版本上是禁用的,但是默认情况下仍然是安装AFAIK。
/etc/profile是在用户login进行交互式会话时执行的(甚至是依赖于login方法和loginshell)。 它对启动时的守护进程没有影响。
显然(我没有testing确认)核心转储从Ubuntu 10.04开始禁用。 可以通过在/etc/security/limits.conf设置非零大小限制来启用它们。 请参阅该文件中的注释以及limits.conf手册页以获取更多信息。 我想你会想添加一个像
* soft core 2000000
具有较高权限的程序通常不会转储核心(我不知道我头顶的确切规则)。 这可能会影响通过特权提升直接启动的进程,如sudo foo ; 尝试sudo sh -c foo来代替(以便subprocess从其最终特权级开始)。
/etc/profile只是由你的loginshell,而不是由initscripts来的。
/etc/security/limits.conf也只会影响login会话,因为这些限制是通过pam_limits.so ; 来自pam_limits手册页:
pam_limits PAM模块对可以在用户会话中获取的系统资源设置限制。
为了得到你想要的行为,你应该修改initscript并插入你的ulimit -c unlimited命令。 正如Dom提到的,你也可以通过编辑lsb init-functions库来做到这一点。
我认为所有这些选项都需要你启动的守护进程。 要核心转储,你应该添加ulimit命令到启动器的开始。 启动器应该使用/ lib / lsb / init-functions 。 所以你可以随意修改它。 我没有在这里testing任何东西,所以试试吧!