задание mysql cron - отправка электронной почты только после перезапуска

задание mysql cron - отправка электронной почты только после перезапуска

У меня есть следующее задание cron, и оно запускается каждые 5 минут (оно действительно работает):

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ "$(/usr/sbin/service mysql status)" != *start/running* ]]
then
    echo "MySQL restarted" | mail -a FROM:*@*  -s "[Marketing Server] Database Service" *@*
    sudo service mysql start
fi

При запуске mysql status (работает)

mysql.service - LSB: Start and stop the mysql database server daemon Loaded: loaded (/etc/init.d/mysql) Active: active (exited) since Wed 2015-12-09 15:01:40 GMT; 21h ago Docs: man:systemd-sysv-generator(8) Process: 30829 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS) Process: 30910 ExecStart=/etc/init.d/mysql start (code=exited,status=0/SUCCESS)

Dec 10 12:10:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:15:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:20:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:25:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:30:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:35:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:40:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:45:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:50:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:55:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Hint: Some lines were ellipsized, use -l to show in full.

при запуске mysql статус (остановлен)

david@MarketingServer:~$ sudo service mysql stop ^[[Adavid@MarketingServer:~$ sudo service mysql status ● mysql.service - LSB: Start and stop the mysql database server daemon Loaded: loaded (/etc/init.d/mysql) Active: inactive (dead) since Thu 2015-12-10 13:03:26 GMT; 1s ago Docs: man:systemd-sysv-generator(8) Process: 5024 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS) Process: 30910 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)

Dec 10 12:35:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:40:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:45:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:50:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 12:55:01 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 13:00:02 MarketingServer systemd[1]: Started LSB: Start and stop the .... Dec 10 13:03:24 MarketingServer systemd[1]: Stopping LSB: Start and stop the.... Dec 10 13:03:24 MarketingServer mysql[5024]: * Stopping MySQL database serve...d Dec 10 13:03:26 MarketingServer mysql[5024]: ...done. Dec 10 13:03:26 MarketingServer systemd[1]: Stopped LSB: Start and stop the .... Hint: Some lines were ellipsized, use -l to show in full.

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

Может ли кто-нибудь объяснить, в чем я ошибся?

решение1

В вашем операторе if есть пара проблем. !Проверка условия в начале означает, что вы ищете, "$(/usr/sbin/service mysql status)"является ли выражение ложным, а это не то, чего вы хотите добиться. Вы хотите проверить, что результат команды статуса службы не является строкой, содержащей «start/waiting». !=— это лучший способ сказать «не равно».

Кроме того, =~ожидает регулярное выражение, где вы просто предоставляете часть строки, которую ожидаете увидеть. Поскольку синтаксис двойных скобок операторов if поддерживает подстановку оболочки, вы можете выполнить поиск 'start/waiting' с помощью *start/waiting*.

Если изменить строку:

if [[ ! "$(/usr/sbin/service mysql status)" =~ "start/running" ]]

К:

if [[ "$(/usr/sbin/service mysql status)" != *start/running* ]]

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

РЕДАКТИРОВАТЬ:

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

Чтобы попытаться справиться с выводом, systemd-sysv-generatorвы можете попробовать заменить первую строку оператора ifна:

if [[ "$(/usr/sbin/service mysql status)" = *inactive* ]]

Связанный контент