Bash - запустить несколько сервисов, если любой работает под управлением CentOS 6.8 - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу проверить, работает ли одна (или все) служба, если да, остановите ее

#!/bin/bash


# Define an array of processes to be checked.
# If properly quoted, these may contain spaces

check_process=( "nagios" "httpd" )

for p in "${check_process[@]}"; do
    if pgrep "$p" > /dev/null; then
        echo "Process \`$p' is running, stopping it"
        service $p stop
    else
        echo "Process \`$p' is not running"
    fi
done

Для службы httpd все работает нормально, скрипт правильно определяет httpd состояние службы. У меня проблемы с обнаружением nagios состояния сервиса. Но хотя служба nagios не запущена, сценарий показывает, что она работает

Process `nagios' is running, stopping it
Stopping nagios:No lock file found in /usr/local/nagios/var/nagios.lock
Process `httpd' is not running

Существует ли более элегантный способ определения, работает ли служба nagios, без проверки наличия файла nagios.lock?

pgrep nagios не показывает вывод, когда служба не настраивается.

1 Ответ

0 голосов
/ 02 ноября 2019

Я сдался, у меня это нормально работает:

, хотя ps -ef | grep -v grep | grep $service | wc -l показывает 0 для nagios, скрипт сообщает, что служба nagios работает

#!/bin/bash

logfile=/tmp/stop_nagios.txt

exec >> $logfile

exec 2>&1


service=httpd

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
   echo "$service is running, stopping it"
   date
   sudo service $service stop


else
   echo "$service is not running"

fi

 # check nagios service    

FILE=/usr/local/nagios/var/nagios.lock
if test -f "$FILE"; then
    echo "nagios service is running, stopping it"
    date
    sudo service nagios stop
else
    echo "nagios is not running..."


fi
...