Проблема с обнаружением запущенных процессов из сценария оболочки

Трубка тут вообще ни при чем. cpне имеет выходных данных, поэтому вы не можете направить его выходные данные в другую программу. Я предполагаю, что вы хотели ;или &&вместо:

## copy the file and then run sed
cp file.txt file.txt.bak; sed -i '1i#Backup file' file.txt.bak

Или

## copy the file and then run sed BUT only if the copy was successfull
cp file.txt file.txt.bak && sed -i '1i#Backup file' file.txt.bak

Однако, если все, что вам нужно, это копия исходного файла с измененной первой строкой, то sed действительно может сделать это за вас:

sed  '1i#Backup file' file.txt > file.txt.bak
0
17.05.2021, 10:47
1 ответ

Оператор <без кавычек является оператором перенаправления в оболочке. Ошибка указывает на то, что оболочка пытается выполнить перенаправление из файла с именем 3. Скорее всего, вы хотели использовать -ltдля сравнения двух целых чисел.

Вот альтернативная реализация:

#!/bin/sh

if ! pkill -0 kafka; then
    mail -s 'Kafka down on QA/Dev server' abc@.com <<END
Hi Support Team,

Kafka is down on QA/Dev server $hostname.
Please take immediate action

Regards,
Application Support Team
END
fi

Приведенный выше скрипт будет использовать pkillдля отправки «нулевого сигнала» каждому процессу kafka(использовать pkill -0 -f kafkaдля поиска подстроки kafkaво всей командной строке, а не только в имени команды ). Если такого процесса не существует, это приведет к выходу pkillс не -нулевым статусом выхода -, что приведет к отправке электронной почты. «Нулевой сигнал» используется для проверки существования процесса и никак не влияет на процесс.

В качестве альтернативы, если вы хотите подсчитать количество kafkaпроцессов и запустить электронное письмо менее чем для трех:

#!/bin/sh

if [ "$( pgrep kafka | wc -l )" -lt 3 ]; then
    mail -s 'Kafka down on QA/Dev server' abc@.com <<END
Hi Support Team,

Kafka is down on QA/Dev server $hostname.
Please take immediate action

Regards,
Application Support Team
END
fi

Вызов pgrepвыводит идентификаторы процессов для всех имен процессов, соответствующих данному шаблону, по одному в строке. Используйте pgrep -f kafkaдля поиска подстроки kafkaво всей командной строке, а не только в имени команды.

Оба приведенных выше сценария предполагают, что переменная hostnameбыла установлена ​​и экспортирована вне сценария. Вы можете использовать $(hostname)вместо $hostnameдля вызова утилиты hostnameв документе здесь -.

4
28.07.2021, 11:31

Теги

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