Intereting Posts
Как развернуть приложение Flask с Supervisor / Nginx / Gunicorn на сервере Ubuntu Пакетное создание папок на основе части имени файла и перемещение файлов в эту папку При создании нового streamа изменения в GUI не выполняются (C #) испытание на нагрузку В linux, как я могу проверить, будет ли вывод программы на живой терминал или в файл? Плохая Linux-память, сопоставленная производительностью файлов с произвольным доступом C ++ и Python переадресация портов в windows Перезапустите аварийную программу с помощью RegisterApplicationRestart без приглашения пользователя. Отдельный вход для дополнительной 10-клавишной клавиатуры Возможно ли балансировать трафик websocket с клиента на несколько серверов использование CreateProcess с относительным путем В терминале Linux, как удалить все файлы в каталоге, кроме одного или двух API для запросов и настройки свойств BIOS Проверка нулевой переменной в пакете Windows Можете ли вы объяснить, почему DirectoryInfo.GetFiles создает это IOException?

Как изменить поведение по умолчанию apport для сбоев, не связанных с упаковкой?

У нас есть сервер Ubuntu, развернутый с поддержкой apport, как показано.

~$ cat /proc/sys/kernel/core_pattern |/usr/share/apport/apport %p %s %c 

К сожалению, поведение apport при работе с непакетными сбоями приложений не совсем по нашему вкусу. apport создает «основные» файлы (при условии, что ulimit -c устанавливается соответствующим образом) в рабочем каталоге в этих сценариях. Например, из журналов apport,

 ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable: /home/jess/a.out (command line "./a.out") ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable does not belong to a package, ignoring ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: writing core dump to /home/jess/core (limit: 18889465931478580853760) 

Разочарочно, как только файл ядра будет там, он не будет перезаписан. Так, например, если мы тестируем приложение и забываем очистить старый файл ядра из рабочего каталога, то при сбое приложения во время теста мы не увидим новый файл ядра. Даже если бы это было переписано, это может быть не идеальным, потому что мы теряем старое kernel.

В идеале, мы хотим сказать apport через аргумент, например, для случая непакетированного приложения, сгенерировать основной файл с именем файла, отформатированным в соответствии с указанным шаблоном (согласно спецификации файла core_pattern). .. есть ли способ сделать это, или что-то подобное?

Другой альтернативой является использование Apport для обработки ваших сбоев. Это спасет основной дамп, а также массу другого полезного контекста об аварии. Добавьте следующие строки в ~/.config/apport/settings (создайте его, если он не существует):

 [main] unpackaged=true 

Теперь сбои будут отображаться как файлы Apport .crash в /var/crash . Вы можете распаковать их с помощью apport-unpack .

Одно предостережение: похоже, что Apport все еще пытается загрузить эти сбои в трекер ошибок Ubuntu, если пользователь оставляет флажок «Отправить отчет об ошибке»; это может быть проблемой, если вы работаете над проприетарным кодом и т. д. Я ищу дополнительную информацию об этом; кажется, что /etc/apport/crashdb.conf может контролировать отправку отчетов о сбоях.

Если это неупакованный двоичный файл, apport все равно будет /proc/sys/kernel/core_uses_pid поэтому вы можете установить это, чтобы увеличить ваши шансы получить правильный основной файл.

Предполагается, что в /proc/sys/kernel/core_pattern имеется ссылка на apport, поэтому в этом случае нет ничего, чтобы apport мог вернуться.

Вы можете увидеть код в сценарии /usr/share/apport/apport который вызывается шаблоном ядра ядра с apport.

Очевидной альтернативой могло бы стать создание нового скрипта Python для использования, как и тот, но с изменениями в функции write_user_coredump , а затем write_user_coredump это с помощью шаблона ядра ядра sysctl.