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 脚本script
,end 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