rsync через cron. Как включить ведение журнала?

8

Я создаю резервную копию удаленного сервера на другом компьютере с помощью rsync.

В cron.daily у меня есть файл с этим:

rsync -avz -e ssh root@example.com:/ /mybackup/

Для входа в систему используется пара открытых / закрытых ключей. Это, кажется, работает хорошо в большинстве случаев, однако (по глупости) я действительно проверял это, только глядя на даты некоторых важных файлов (дампы MySQL), которые, как я знаю, меняются каждый день. Очевидно, что после этого файла может возникнуть ошибка.

Иногда это не удается. Когда я запускаю его вручную, иногда происходит что-то вроде «сброса клиента».

Каков наилучший способ зарегистрировать это, чтобы я мог с уверенностью проверить, завершено ли это или нет? Журнал cron не указывает на какие-либо ошибки. Я не пробовал, но на странице руководства rsync старой версии CentOS на резервной машине не указана опция --log-file. Я думаю, я мог бы перенаправить стандартный вывод с помощью>, но я не хочу знать о каждом файле. Я просто хочу знать, все это работает или нет ..

Спасибо

tetranz
источник

Ответы:

13

Я думаю, что вы уже решили свой вопрос. Если вы перенаправите как stdout, так и stderr в файл, вы не получите вывод для каждого файла, переданного rsync - это будет создано, только если вы работаете в режиме verbose ( -v). Поведение по умолчанию rsync- производить вывод только в случае ошибки. Так что вы можете сделать это ...

rsync ... > /var/log/rsync.log 2>&1

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

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

rsync ... || echo "rsync failed" | mail -s 'rsync falied' you@example.com
larsks
источник
Спасибо. Я попробую. Я предполагал, что получу каждый файл в журнале, потому что это то, что я вижу на экране, если я попытаюсь сделать это вручную без многословия. Почта выглядит хорошо.
тетранз
Если вы запускаете rsync вручную без -vфлага и по-прежнему видите вывод для каждого файла, значит что-то не так. Страница руководства rsync гласит: «По умолчанию rsync работает без вывода сообщений. Один -v даст вам информацию о том, какие файлы передаются, и краткую сводку в конце».
Жаворонки
Ну, это определенно то, что происходит. -v, кажется, включен по умолчанию. Я просто сделал перенаправление журнала, как вы предлагаете, и журнал имеет строку для каждого файла. Я не говорю, что ты не прав. CentOS должен был скомпилировать rsync по-другому. Я добавил исключений для / proc и / sys.
tetranz
Я использую CentOS, и rsync ведет себя так, как описано. Как на самом деле выглядит ваша командная строка?
Жаворонки
1
Видите, вы работаете в многословном режиме. У вас есть -vтам.
Жаворонки
4

Уберите опцию -v и добавьте -q. Это даст только ошибки

Matt
источник
1

Возможно, вы могли бы использовать системный журнал с помощью команды: logger .

Я запускаю сценарии таким образом:

rsync -v what user@host 2>&1 | logger -t backup

Это будет писать /var/log/messagesпо умолчанию.

user897079
источник