Рейтинг:-2

При создании шаблона именования файлов для дампа ядра вы можете изменить спецификатор времени с времени эпохи unix на удобочитаемую форму на лету

флаг cn

Я прочитал man core и man date, а также четыре качественные веб-страницы, посвященные дампам ядра. Я изучаю и практикуюсь в создании дампов ядра уже четыре дня.

Вопрос хорошо сформулирован в заголовке поста.

Примечание: когда я говорю о «ядре», я также имею в виду параметр ядра kernel.core_pattern и буду называть его переменной среды. Я называю это переменной среды, потому что она действует как переменная среды в глобальной области видимости. Я использую эти термины взаимозаменяемо.

ядро описывает на странице руководства, как установить эту переменную среды в соответствовать шаблону. Шаблон предлагает «спецификатор времени» %t что обеспечивает в шаблон текущее время в формате unix, секунды с начала эпохи.

В соответствии с основными рекомендациями следующий сценарий является применимым шаблоном:
ядро.%e.%t

%e - имя исполняемого файла
%t — время дампа, выраженное в секундах с начала Эпохи.
core - это имя файла. Это может быть ядро ​​или любое имя, которое вы ему дадите.

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

Мы можем установить переменную среды следующим образом:
sudo sysctl -w kernel.core_pattern=core.%e.%t

Теперь мне нужна дата в двузначном формате года, двухзначного месяца, двузначного дня, например 220224.Проблема в указателе времени %t ядра предоставляет время в секундах с начала эпохи, не очень удобно для человека!

Я также потребовал, чтобы дата стала самой последней датой после выполнения скрипта. Спецификатор времени %t ядра сделает это; но, в результате имя файла читается с отметкой времени unix, что не очень удобно для человека!

И наоборот, если я заменю скрипт на место указателя времени ядра при установке переменной окружения kernel.core_pattern, тогда шаблон именования ядра всегда будет записываться с датой, указанной во время создания шаблона, а не с фактическим временем ядра. свалка.

Сценарий, который я придумал для этого, следующий. Я просто заменил основной спецификатор времени в шаблоне приведенным здесь фрагментом: дата -d "-8 часов" +%y%m%d

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

Мои скрипты выглядят так:
sudo sysctl -w kernel.core_pattern=core.%e.`date -d "-8 часов" +%y%m%d`; ~/test.out

~/test.out часть этого сценария запускает тестовый файл, который я использую, чтобы узнать, как устранять неполадки при установке Linux.

Мой сценарий устанавливает переменную среды прямо перед вызовом сценария тестирования. Преимущество этого в том, что файл дампа ядра получает имя так же, как вызывается сценарий тестирования; и это дает файлу дампа ядра осмысленное имя. Мой сценарий работает; тем не менее, каждый раз, когда мне нужно получить дамп ядра, я должен помнить, что вызов сценария тестирования должен сопровождаться моим сценарием. Если я не комбинирую назначение переменной среды с вызовом сценария тестирования, дата, записанная в файл дампа ядра, становится такой, какой она была установлена ​​в последний раз, когда было установлено назначение переменной среды, не очень точно.

Я хочу переписать свой сценарий, чтобы максимально использовать дату, записанную в удобочитаемом формате, а также дату, записанную во время создания дампа ядра. Я пытался!

Одна проблема, с которой я столкнулся, возникает из-за того, что команда date использует тот же токен управления форматом. %t как и токен спецификатора основного шаблона %t

Это тест для подтверждения конфликта основного спецификатора времени и управления форматом команды даты:

  этот токен должен быть из основного спецификатора времени 
    sudo sysctl -w kernel.core_pattern=core.%e.`date -d@%t +%y%m%d`; ~/test.out

Это дает сообщение «дата: неверная дата â@%tâ»

Видите ли, мы не можем просто вставить основной спецификатор времени в местонахождение времени скрипта даты.

Это тест для подтверждения того, что скрипт работает по назначению:

                             Это временная метка эпохи Unix. 
    sudo sysctl -w kernel.core_pattern=core.%e.`date -d@1645337785 +%y%m%d`; ~/test.out

Это работает, как и ожидалось, за исключением того, что дата остается постоянной.

Видите ли вы, что временная отметка unix может фактически оказаться вместо временного местоположения сценария даты.

Там может быть другой способ сделать это; но я не знаю. Я спрашиваю, видит ли кто-нибудь из вас способ обойти это.

Спасибо за ваше время заранее.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.