2015-10-07 2 views
2

Я пишу сценарий оболочки, который создает файл журнала всех заданий, которые он завершил. В самом конце скрипта он создает tar-файл и перезапускает службу.Отправить сообщение, если task failed

Я бы хотел, чтобы сценарий отправил электронное письмо, если процесс tar не прошел или служба не запустилась. Я не уверен, как проверить, прошел ли tar и служба с ошибкой.

Вот пример сценария оболочки без проверки, если деготь или услуга завершена ...

#!/bin/bash 

# Shutdown service 
service $SERVICE stop 

# Task 1 
command > some1.log 

# Task 2 
command > some2.log 

# Task 3 
command > some3.log 

# Compress Tar file 
tar -czf logfiles.tar.gz *.log 

# Start service 
service $SERVICE start 

# mail if failed 
mail -s "Task failed" | [email protected] << "the task failed" 

Update: Сценарий не должен прерывать как я хочу службу, чтобы попытаться начать снова, если какой-либо из предыдущие задачи потерпели неудачу.

ответ

3

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

# Compress Tar file 
tar -czf logfiles.tar.gz *.log 

TAR_EXIT_STATUS=$? 

# Start service 
service $SERVICE start 

SERVICE_EXIT_STATUS=$? 

# mail if failed 
if [ $TAR_EXIT_STATUS -ne 0 ] || [ $SERVICE_EXIT_STATUS -ne 0 ];then 
    mail -s "Task failed" | [email protected] << "the task failed" 
fi; 
+0

Awesome! Это должно сработать. Я предполагаю, что оператор if будет использовать SERVICE_EXIST_STATUS и TAR_EXIT_STATUS? – user1052448

+0

Да, сори об этой опечатке. Я обновил ответ. –

1

Вот простое решение, используя функцию:

#!/bin/bash 

failfunction() 
{ 
    if [ "$1" != 0 ] 
    then echo "One of the commands has failed!!" 
     #mail -s "Task failed" | [email protected] << "the task failed" 
     exit 
    fi 
} 

# Shutdown service 
service $SERVICE stop 
failfunction "$?" 

# Task 1 
command > some1.log 
failfunction "$?" 

# Task 2 
command > some2.log 
failfunction "$?" 

# Task 3 
command > some3.log 
failfunction "$?" 

# Compress Tar file 
tar -czf logfiles.tar.gz *.log 
failfunction "$?" 

# Start service 
service $SERVICE start 
failfunction "$?" 
+0

Это вызовет слишком много сообщений электронной почты, если сработало несколько задач. – user1052448

+2

«Выход» предотвращает это. –

+0

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

Смежные вопросы