如何设置Asterisk的当前工作目录?

我需要能够收集核心转储,但是由于Asterisk的CWD是/(所以声称procfs),它永远不会写它们。 我已经证实了我的怀疑,让世界写信给SIGABRT这个过程,瞧,我有一个核心。

我显然可以使用core_pattern覆盖整个系统,但是我更喜欢把caching转储到cwd的默认行为。 每隔一个Asterisk安装我工作,cwd是/ tmp,但由于某种原因这个新的它是/。 我试图在Asterisk服务启动脚本中使用cd / tmp,但是这样做是平淡无奇的。

这是Debian 7.1上的Asterisk C.3.7.2,源代码中没有chdir(),它专门将其设置为/。

Asterisk和许多守护进程一样,在把自己变成一个守护进程时做一个chdir('/')

 main/asterisk.c 3675: if (chdir("/")) { 

这是为了确保它不会保持打开的目录,以后可能需要删除。 为防止星号这样做,您需要使用asterisk -f在前台运行星asterisk -f

虽然没有logging,但-g标志也具有不改变目录的效果。 其文档说:

  -g Remove resource limit on core size, thus forcing Asterisk to dump core in the unlikely event of a segmentation fault or abort signal. NOTE: in some cases this may be incompatible with the -U or -G flags. 

而阅读源代码告诉我,它也阻止了chdir("/")