Рейтинг:5

Простой bash-скрипт резервного копирования с nohup и rsync

флаг in

У меня есть следующая простая команда, чтобы запустить процесс резервного копирования в фоновом режиме с помощью nohup:

nohup rsync -a /src/target &

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

nohup rsync -a /src/ /target/ &
старыйpid=$!
подожди

если [[$? -экв 0 ]]
тогда
        эхо "УСПЕХ"
еще
        эхо "НЕ ПРОЙДЕНО"
фи

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

  • Может ли переменная $? перезаписываться, когда между ними выполняется другая команда?
  • Это подожди возиться с асинхронным способом nohup?

А может эта логика просто тупая и просто есть подход получше?

marcelm avatar
флаг cn
Вы используете cron для запуска команды rsync? Если да, рассматривали ли вы возможность использования [хронического] (https://github.com/docwhat/chronic) (и обеспечения того, чтобы cron мог отправлять почту)?
Рейтинг:4
флаг cn

Согласно вопросу:

Может ли переменная $? перезаписываться, когда между ними выполняется другая команда?

Ответ ДА. Переменная $? содержит статус выхода последней задачи. Например:

$ ложь; эхо $?
1
$ ложь; истинный; эхо $?
0
$ ложь; истинный; ЛОЖЬ; эхо $?
1

Вроде как переменная $! содержит PID последней фоновой задачи.

Справка: Devhints.io: шпаргалка по сценариям Bash


Согласно вопросу:

Это подожди возиться с асинхронным способом нет?

Не должен - разве он не предназначен именно для таких задач? :)


Согласно вопросу:

А может эта логика просто тупая и просто есть подход получше?

Для меня непонятно, почему вы нажимаете rsync в задний план а потом ждать вместо этого просто выполните команду, а затем выполните тест.

#!/бин/баш
rsync -a исходный файл. файл назначения. файл 2>/dev/null

если [[$? -экв 0 ]]; затем эхо "УСПЕХ"; иначе эхо "НЕУДАЧА"; фи
  • 2>/dev/ноль используется здесь для подавления сообщений об ошибках rsync, но вы можете сохранить их во временном файле и прикрепить к электронному письму.

Но, наверное, это не весь сценарий...


Кроме того, в первых рядах помогите подождать предоставляется следующая информация.

ждать: ждать [-fn] [id ...]

Дождитесь завершения задания и возврата статуса выхода.

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

#!/бин/баш
nohup rsync -a исходный файл.файл назначения.файл 2>/dev/null &
старыйpid=$!

если подождать $oldpid
тогда
        эхо "УСПЕХ"
еще
        эхо "НЕ ПРОЙДЕНО"
фи
  • 2>/dev/ноль используется здесь для подавления сообщений об ошибках нет, пока rsync сообщения об ошибках идут где-то в фоновом режиме.

Ответить или комментировать

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