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

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

我需要能够收集核心转储,但由于 Asterisk 的 CWD 是 /(procfs 声称如此),它永远无法写入它们。我通过允许 world 写入 / 和 SIGABRT 进程证实了我的怀疑,瞧,我有一个核心。

我显然可以使用 core_pattern 来覆盖整个系统,但我更喜欢将核心转储到 cwd 的默认行为。我处理过的其他所有 Asterisk 安装,cwd 都是 /tmp,但出于某种原因,这个新安装的 cwd 是 /。我尝试在 Asterisk 服务启动脚本中“cd /tmp”,但没有任何效果。

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

答案1

与许多守护进程一样,Asteriskchdir('/')在将自身转变为守护进程时会执行操作。

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

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

虽然没有记录,但该-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("/")

相关内容