Назад | Перейти на главную страницу

Как установить текущий рабочий каталог Asterisk?

Мне нужно иметь возможность собирать дампы ядра, но поскольку CWD Asterisk - это / (так заявляет procfs), он никогда не сможет их записать. Я подтвердил свои подозрения, разрешив миру писать в / и SIGABRT процесс, и вот, у меня было ядро.

Я, очевидно, могу использовать core_pattern для переопределения общесистемной функции, но мне больше нравится поведение по умолчанию - выгрузка ядра в cwd. Каждая другая установка Asterisk, над которой я работал, cwd - это / tmp, но по какой-то причине эта новая - это /. Я попытался ввести cd / tmp в скрипт запуска службы Asterisk, но ничего не произошло.

Это Asterisk C.3.7.2 в Debian 7.1, в исходном коде нет chdir (), который специально устанавливает его в /.

Asterisk, как и многие другие демоны, chdir('/') при превращении себя в демона.

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

Это сделано для того, чтобы убедиться, что каталог не остается открытым, который вы, возможно, захотите удалить позже. Чтобы звездочка не делала этого, вам нужно будет запустить звездочку на переднем плане, используя asterisk -f.

Хотя это не задокументировано, -g flag также не меняет каталог. В его документации говорится:

   -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("/")