如何在 Upstart 脚本中设置自动核心转储?

如何在 Upstart 脚本中设置自动核心转储?

myapp是一个最终崩溃的应用程序。我想获取这些崩溃的核心转储...

这是我为实现此目的而编写的 upstart 脚本。它尚未运行。

description "myupstart"

start on runlevel [2534]
stop on runlevel [!2534]

script

    ulimit -c 10000
    echo "/var/crash/core.%e.%s.%u.%g.%p.%t" > /proc/sys/kernel/core_pattern

    cd /path/to/app
    ./myapp

end script

respawn

细节:
myapp删除权限后仍能正常工作。它以 root 身份启动 [当然],然后切换到另一个用户名/组。这有问题吗?

如果我手动启动应用程序,以下命令在命令行中起作用,但它们在 upstart 脚本中不起作用:

ulimit -c 10000
echo "/var/crash/core.%e.%s.%u.%g.%p.%t" > /proc/sys/kernel/core_pattern

为什么会有这种差异呢?

答案1

尝试使用和之间的命令制作一个单独的包装器 bash 脚本scriptend script并将其传递给exec同一个 upstart 文件中的选项。

很有可能,ulimit -c 10000当新贵打来电话时,所有的东西都消失了./myapp

还请注意,将文件命名为“upstart script”并不完全正确。它是一个配置文件。它可能包含可执行行,但其主要目的是存储配置而不是可执行命令。

附录:我遵循了上述相同的逻辑,但不是创建另一个脚本,而是想到了“执行”,ulimit -c 10000 && ./myapp而且它成功了!upstart 接受了&&

答案2

下列方法应该同样有效。

description "myupstart"

start on runlevel [2534]
stop on runlevel [!2534]

limit core 10000 10000
chdir /path/to/myapp

pre-start script
    echo "/var/crash/core.%e.%s.%u.%g.%p.%t" > /proc/sys/kernel/core_pattern
end script

exec /path/to/app/myapp

相关内容