Как я могу получить дамп ядра, когда запускаю что-то из cron, которое обычно будет ядром?

Сегодня то, что я делаю, и для которого я пытаюсь обнаружить дампы ядра и предупредить меня, на самом деле натолкнулось на ложное утверждение (то, что обычно ядро ​​сбрасывает, когда я запускаю его в командной строке на переднем или на заднем плане), но ядро ​​не сбрасывалось. Я написал этот простой тест:

int main
{
sleep(3);
assert(false);
}

который, когда я собираю и запускаю, будет дамп памяти все время. Но когда я поместил его в crontab, я вместо этого получил электронное письмо от демона cron:

rocket: main.cpp:10: int main(int, char**): Assertion `false' failed.
/bin/sh: line 1: 32448 Aborted                 ./rocket

и никакой основной файл не был помещен в /cores, Почему это так и как я могу получить свое ядро?

1

Решение

Чтобы основной файл создавался при сбое, дампы ядра должны быть включены в текущей среде. Из оболочки это можно сделать с помощью ulimit:

ulimit -c unlimited

Что означает «установить максимальный размер дампа ядра на неограниченный». Ваша система, вероятно, настроена для этого в интерактивных оболочках, но не в заданиях cron. Чтобы сделать это из задания cron, вам нужно изменить это ограничение. Если задание cron является сценарием оболочки, который вызывает другие программы, вы можете просто вызвать ulimit как указано выше. С другой стороны, если задание является исполняемым, вы можете создать оболочку для его запуска:

#!/bin/bash
ulimit -c unlimited
exec "$@"

Другой вариант — изменить программу, чтобы установить само ограничение, используя setrlimit функция.

Что касается того, почему ваши ядра собираются в / cores, а не в рабочий каталог: ваш дистрибутив мог скорректировать основной образец, возможно, с помощью программы для обработки основных файлов и размещения их в / cores.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]