Я сейчас пытаюсь написать сценарий, который поддерживает несколько моих сайтов вместе с их базами данных.Поймать ошибку mysqldump в скрипте bash
Все работает хорошо, но я стараюсь быть немного умнее с моим журналом - в принципе, на данный момент он попытается запустить mysqldump и будет эхом успеха или неудачи.
Что я предпочел бы сделать, это выводить фактическую ошибку, а не просто бесполезное сообщение «mysqldump failed». Я имел взгляд вокруг, и я почти в состоянии сделать это, как я хочу, используя «2> log_file.txt»
Моя оригинальная команда:
mysqldump -u asdsa --password=$DB_PASS $DB_NAME > $MYSQL_LOCATION
if [ "$?" -eq 0 ]
then
echo -e "mysqldump successfully finished at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
else
echo -e "mysqldump failed at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
fi
Поэтому я добавил «2> $ LOG_LOCATION |» чтобы поймать фактическую ошибку. Так что мой обновленный команда выглядит следующим образом (это добавление в первой строке):
mysqldump -u $DB_USER--password=$DB_PASS $DB_NAME 2> $LOG_LOCATION | > $MYSQL_LOCATION
if [ "$?" -eq 0 ]
then
echo -e "mysqldump successfully finished at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
else
echo -e "mysqldump failed at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
fi
Это выводит сообщение об ошибке в мой лог-файл, но переписывает ничего там. Это также означает, что моя ошибка, проверяющая, не выдает ли оператор ошибку.
Есть ли способ, что я могу:
а) поймать фактическую ошибку в функции туздЫшпра (т.е. доступ запрещена для этого пользователя) б) добавить эту ошибку в существующем журнале ошибок с) также добавить сообщение об успешном завершении или сбое после выданной выше ошибки
Любая помощь будет замечательной!
Спасибо!
Вы также можете добавить с переадресацией: '2 >> $ LOG_LOCATION', поэтому используйте это в своей команде mysqldump, чтобы не перезаписывать файл журнала. – zerodiff