Я запускаю CentOS 5.5 и работаю над серверным приложением, которое иногда мне нужно принудительно создать дамп ядра, чтобы я мог видеть, что происходит. Если я запускаю свой сервер из оболочки и отправляю kill SIGABRT, создается файл ядра. Если я запускаю ту же программу из crontab, а затем отправляю ей тот же сигнал, сервер «убит», но файл ядра не создается. Кто-нибудь знает, почему это так и что нужно добавить в мой код или изменить в настройках системы, чтобы разрешить создание файла ядра?
Просто примечание стороны
У меня установлен неограниченный ulimit в / etc / profile
Я установил
в /etc/sysctl.conf
Кроме того, мое серверное приложение было добавлено в crontab под тем же идентификатором входа, что и я запускаю его из оболочки.
Любая помощь очень ценится
Текущий рабочий каталог для задания cron может отличаться от ожидаемого. Попробуйте сделать cd /some/writeable/dir && yourdaemon
в записи в crontab. Кроме того, вы обычно должны запускать демонов с помощью init или Upstart или аналогичных. Видеть Управление процессом.
Из man 5 core
:
Существуют различные обстоятельства, при которых файл дампа ядра не создается:
У процесса нет разрешения на запись в основной файл. (По умолчанию основной файл называется core и создается в текущем рабочем каталоге. Подробные сведения об именовании см. Ниже.) Запись основного файла завершится неудачно, если каталог, в котором он должен быть создан, недоступен для записи или если файл с таким же именем существует и недоступен для записи или не является обычным файлом (например, это каталог или символическая ссылка).
(Доступный для записи, обычный) файл с тем же именем, которое будет использоваться для дампа ядра, уже существует, но существует более одной жесткой ссылки на этот файл.
Файловая система, в которой будет создан файл дампа ядра, заполнена; или закончились inodes; или установлен только для чтения; или пользователь достиг своей квоты для файловой системы.
Каталог, в котором должен быть создан файл дампа ядра, не существует.
Пределы ресурсов RLIMIT_CORE (размер файла ядра) или RLIMIT_FSIZE (размер файла) для процесса установлены равными нулю; см. getrlimit (2) и документацию по команде оболочки ulimit (limit в csh (1)).
Для двоичного файла, выполняемого процессом, не разрешено чтение.
Процесс выполняет программу set-user-ID (set-group-ID), которая принадлежит пользователю (группе), отличному от реального идентификатора пользователя (группы) процесса. (Однако см. Описание операции prctl (2) PR_SET_DUMPABLE и описание файла / proc / sys / fs / suid_dumpable в proc (5).)