У меня есть существующая функция is_active_instance, которая определяет, запущен ли экземпляр базы данных (true) или нет. Я работаю в новой функции is_inactive_instance, которая должна возвращать true, если is_active_instance возвращает false.

Как я могу вызвать is_active_instance из is_inactive_instance и отменить его возврат для возврата True в основную программу?

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

is_active_instance(){
    dbservice=""
    if is_mysql_db
    then
        dbservice="mysqld"
    elif is_mariadb_db
    then
        dbservice="mysqld"
    elif is_postgre_db
    then
        dbservice='postgresql'
    fi
    [ $(ps -ef | grep -v grep | grep $dbservice* | wc -l) > 0 ]
}

is_inactive_instance(){
    [ [ ! is_active_instance ] ]
}

if is_active_instance
then
        echo "Is active instance"
elif is_inactive_instance
then
        echo "Is inactive instance"
else
        echo "Other result"
fi

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

0
Gaita 29 Май 2019 в 22:40

2 ответа

Лучший ответ

Не используйте [ s:

is_inactive_instance(){
    ! is_active_instance
}

Также см. Сравнение чисел в Bash, чтобы узнать, как заставить работать ваш is_active_instance.

2
that other guy 29 Май 2019 в 19:55
Here is an example of how to do this in BASH.  Your code is on the right track but needs syntax changes to work in BASH.

Instead of checking for a NOT you would check for "Yes" or "No", and you may change the outputs to zeroes and ones if you wish and test for those.

Copy the code between CODE STARTS and CODE ENDS into ./active_instance.sh.

Type the line below and press RETURN.
     chmod 755 ./active_instance.sh


CODE STARTS HERE ==================
#!/usr/bin/env bash

for some_db in mariadb mysqld postgres oracle sybase
do
        echo -n "Checking ${some_db}..."
        set `ps -ef|grep -v grep|grep ${some_db}|wc`

        if test ${1} -gt 0
                then
                        echo "Yes"
                else
                        echo "No"
        fi
done
CODE ENDS HERE ==================


To run, type the line below and press RETURN.
     ./active_instance.sh

Sample execution:

./active_instance.sh
Checking mariadb...Yes
Checking mysqld...Yes
Checking postgres...Yes
Checking oracle...No
Checking sybase...No
0
keithchristian 29 Май 2019 в 20:38