Сопоставление дисков ASM с физическими дисками в AIX на основеВторостепенные числа

Это действительно зависит от того, что вы подразумеваете под «безопасным». У вас есть два варианта убить процесс:

  • Вежливо попросить процесс завершиться (, например, с помощью SIGTERM)
  • В -вежливо потребовать от ядра принудительно убить его (Например,:kill -9)

В большинстве случаев самый чистый и «безопасный» способ завершить процесс — вежливо попросить об этом с помощью SIGTERM. Это связано с тем, что по умолчанию программы распространяют SIGTERM на всех своих дочерних элементов и, таким образом, очищают все дерево процессов. Это также лучше, потому что у завершающихся процессов есть время, чтобы закрыть то, что они делали, чисто (очищая буферы и т. д. ).

Когда вы принудительно завершаете процесс, это не обязательно (или даже по умолчанию )уничтожает дочерние процессы. Имеет тенденцию оставлять сирот. Он также имеет тенденцию повреждать файлы и, как правило, вызывает небольшой беспорядок. Таким образом, очистка с принудительным уничтожением(kill -9)не должна выполняться автоматически.


Сценарии Bash особенно сложно поддаются очистке. По умолчанию они будут распространять SIGTERM на свои дочерние процессы и ждать завершения своих дочерних процессов. Если по какой-то причине вы отправляете SIGTERM в сценарий bash, и он не завершается, то kill -9почти наверняка оставит сирот.

Чтобы принудительно убить их, вам нужно принудительно убить скрипт и принудительно убить всех его дочерних элементов. Как правило, это беспорядочно и не рекомендуется в качестве автоматического действия.

К счастью, timeoutзнает о проблеме дочерних процессов и стирает все дерево процессов, если его об этом просят.

timeout -s 9 20 myscript

Принудительно завершит все дочерние процессы.Имейте в виду, что это по-прежнему «грязный» способ закрытия команд, поскольку у них нет возможности правильно очистить себя и они могут повредить файлы.

0
26.01.2020, 09:10
1 ответ

Когда сценарий дойдет до ebs_ocr11, переменные будут major="34,"и minor="5". So theкоманда grep, ищущая правильную строку из списка rhdiskpower, будет:

... | grep rhdiskpower | grep "34, *5" | ой...

Поскольку в регулярном выражении не указано, что после переменной $minorдолжен быть пробел, выражение будет соответствовать не только 34, 5, но и 34, 50, 34, 51... вплоть до 34, 59. Таким образом, grepвыведет несколько строк, а awkудалит из каждой строки все элементы, кроме 10-го, но сохранит их как отдельные строки.

Значением $physical_diskстановится строка, содержащая символы перевода строки:"rhdiskpower5\nrhdiskpower50\nrhdiskpower51\n..."и т. д.

Исправление

Я предлагаю изменить эту строку:

physical_disk=`ls -l /dev | grep rhdiskpower | grep "$major *$minor" | awk '{ print $10 }'`

к этому:

physical_disk=`ls -l /dev | grep "$major *$minor.* rhdiskpower[0-9]*$" | awk '{ print $10 }'`

Это также удаляет один дополнительный grep.

Если команда AIX lsиспользует в своих выходных данных символы табуляции вместо пробелов, возможно, вам придется заменить некоторые пробелы в регулярном выражении на \tили подобное.

Другие предложения

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

  • по смещению 0x0020 от начала устройства ASM должна быть постоянная строка ORCLDISK. Сразу после строки может быть строка информации о драйвере для конкретной платформы -или просто нулевой терминатор.
  • по смещению 0x0048 вы найдете имя диска ASM, завершенное нулем -.
  • по смещению 0x0068 находится имя группы дисков ASM, к которой в настоящее время принадлежит диск, также завершается нулем -.
  • по смещению 0x0088 находится имя отказоустойчивой группы ASM, к которой принадлежит диск, также завершается нулем -.

Если бы у вас был root-доступ и команда, которая могла бы прочитать строку с фиксированным смещением на блочном устройстве, вооружившись этой информацией, вы могли бы просто перебрать все устройства rhdiskpower*и проверить, является ли каждое из них ASM-диском. и прочтите идентификационную информацию, если она есть. Это может предложить более надежный способ сопоставления дисков ASM вместо разбора вывода ls.

1
28.01.2020, 02:38

Теги

Похожие вопросы