Если вы используете дистрибутив systemd, вы можете использовать системный таймер для получения такого уровня разрешения синхронизации. В зависимости от вашего случая использования, вы можете использовать его как дельта-t (например, каждые x секунд с момента загрузки) или настроить его с помощью времени стены (например, в 00:00:10, 00:02:10 и т. Д.).
Короче говоря, вы создадите 2 файла.
Первый — это файл .timer, , описанный здесь. Это настроит время событий таймера и настроит то, что произойдет при возникновении события синхронизации. Есть ряд критериев, которые нужно определить - например, хотите ли вы, чтобы он запускался сразу при загрузке, а затем каждые 130 секунд? Вы хотите, чтобы он запускался, если он находится на более низком уровне пробега? Вы хотите, чтобы он продолжал работать, если он столкнулся с ошибками? Systemd становится, возможно, сложным гораздо быстрее, чем старые подходы с файлами init и заданиями cron. Однако его использование вместо cron решит вашу проблему со временем.
Второй файл обычно представляет собой service-файл, который вызывается службой таймера. В этом файле вы определите, что делает задание cron - либо простую команду, либо вызов другого скрипта, чтобы разрешить более сложные задачи. Этот служебный файл обычно настраивается как «oneshot». Смотрите здесь для получения более подробной информации.
Файлы должны быть скопированы в /etc/systemd/system/, и вы запустите следующее, чтобы включить / запустить службу таймера:
systemctl enable mycronjob.timer
systemctl start mycronjob.timer
Вы можете использовать journalctl для просмотра / отладки вашей реализации. Для получения дополнительной информации см. обсуждение archwiki.
... обычно вы ничего не находите. Но, к счастью, в Linux есть обработчик для этого, который вы можете указать во время выполнения. В /usr/src/linux/Documentation/sysctl/kernel.txt вы найдете:
[ / proc / sys / kernel /] core_pattern используется для указания имени шаблона файла дампа ядра.
- Если первым символом шаблона является '|', ядро будет рассматривать остальную часть шаблона как команду для выполнения. Дамп ядра будет записан на стандартный ввод этой программы, а не в файл.
( спасибо )
Согласно источнику, это обрабатывается программой abrt
(это инструмент автоматического сообщения об ошибках, а не прерывание), но в моем Arch Linux это обрабатывается systemd. Вы можете написать свой собственный обработчик или использовать текущий каталог.
То, что он содержит, зависит от системы, но согласно всезнающей энциклопедии :
{ {1}}[Дамп ядра] состоит из записанного состояния рабочей памяти компьютерной программы в определенное время [...]. На практике другие ключевые части состояния программы обычно сбрасываются одновременно, включая регистры процессора , которые могут включать в себя счетчик программ и указатель стека , информацию об управлении памятью. , а также другие флаги и информацию о процессоре и операционной системе.
... так что он в основном содержит все, что gdb
когда-либо хотел, и многое другое.
Вы оба можете быть счастливы, поскольку gdb
загрузит любой дамп ядра, если у вас есть точная копия вашего исполняемого файла: gdb путь / к / binary my / core.dump
. После этого вы сможете продолжить работу в обычном режиме, и вас будут раздражать попытки и неудачи в исправлении ошибок вместо попыток и неудач в их воспроизведении.
Основной файл обычно называется core
и находится в текущем рабочем каталоге процесса. Тем не менее, существует длинный список причин, по которым основной файл не будет сгенерирован, и он может быть расположен где-то еще, под другим именем. Подробности см. на странице core.5:
ОПИСАНИЕ
По умолчанию определенные сигналы действуют так: процесс Завершите и создайте файл дампа ядра , файл диска, содержащий файл изображение памяти процесса на момент его завершения. Это изображение может использоваться в отладчике (например, gdb(1)) для проверки состояния на момент ее завершения. Список сигналов, которые Причину процесса сброса ядра можно найти в signal(7).
...
Существуют различные обстоятельства, при которых файл дампа ядра не создается:
* Процесс не имеет разрешения на запись основного файла. (По По умолчанию основной файл называется core или core.pid, где pid — Идентификатор процесса, который сбросил ядро, и создается в текущий рабочий каталог. Подробности об именовании см. ниже.) Запись основного файла завершится ошибкой, если каталог, в котором он находится Быть созданным нельзя записывать или если существует файл с таким именем и не является записываемым или не является обычным файлом (например, это каталог или символическая ссылка). * Файл (записываемый, обычный) с тем же именем, которое используется для Дамп ядра уже существует, но существует более одной жесткой ссылки в этот файл. * Файловая система, в которой будет создан основной файл дампа, заполнена; или закончились иподы; или монтируется только для чтения; или пользователь имеет достигли своей квоты для файловой системы. * Каталог, в котором должен быть создан основной файл дампа не существует. * RLIMIT_CORE (размер основного файла) или RLIMIT_FSIZE (размер файла) ограничения ресурсов для процесса равны нулю; см. getrlimit(2) и документация команды ulimit оболочки (предел в csh(1)). * Двоичный файл, выполняемый процессом, не имеет чтения разрешение включено. * Процесс выполняет программу set-user-ID (set-group-ID), которая принадлежит пользователю (группе), не принадлежащему реальному идентификатору пользователя (группы) Процесс или процесс выполняет программу, которая имеет файл возможности (см. возможности(7)). (Однако см. описание операции PR_SET_DUMPABLE prctl(2) и описание файл /proc/sys/fs/suid_dumpable в proc(5).) * (Начиная с Linux 3.7) Ядро было настроено без CONFIG_COREDUMP вариант.
В дополнение Дамп ядра может исключать часть адресного пространства процесс, если был использован флаг madvise(2) MADV_DONTDUMP.
Именование файлов дампа ядра
По умолчанию файл дампа ядра называется core, но /proc/sys/kernel/core_pattern файл (начиная с Linux 2.6 и 2.4.21) может быть настроенным для определения шаблона, который используется для имен основных файлов дампа. Шаблон может содержать спецификаторы % , которые заменяются Следующие значения при создании основного файла:
%% один символ % %c Размер основного файла мягкий ресурс Ограничение процесса сбоя (начиная с Linux 2.6.24) Режим дампа %d — то же значение, возвращаемое prctl(2) PR_GET_DUMPABLE (начиная с Linux 3.7) %e имя исполняемого файла (без префикса пути) %E путь к исполняемой файлу, с косыми чертами ('/'), замененными на восклицательные знаки ('!') (начиная с Linux 3.0). %g (числовой) реальный GID демпингового процесса %h имя хоста (то же, что и имя узла, возвращаемого uname(2)) %i TID потока, который вызвал дамп ядра, как показано в PID пространство имен, в котором находится поток (начиная с Linux 3.18) %I TID потока, который вызвал дамп ядра, как показано в начальное пространство имен PID (начиная с Linux 3.18) %p PID дампа процесса, как показано в пространстве имен PID, в котором Процесс находится в резиденту %P PID дампингового процесса, как показано в исходном пространстве имен PID (начиная с Linux 3.12) %s количество сигналов, вызывающих дамп % t времени дампа, выраженного в секундах с эпохи, 1970-01-01 00:00:00 +0000 (UTC) %u (числовой) реальный UID демпингового процесса
En Ubuntu, cualquier falla que ocurra se registra en /var/crash. El informe de bloqueo generado se puede desempaquetar usando una herramienta
apport-unpack /var/crash/_crash_file.crash 'path to unpack'
y luego el volcado del núcleo en el informe desempaquetado se puede leer usando
gdb 'cat ExecutablePath' CoreDump