PDA

View Full Version : rsnapshot + crontab


japplegame
18-05-2008, 11:23
Никак не удается подружить cron с rsnapshot (а если быть точнее то с rsync).
В наличии имеется настроенный rsnapshot. Соединение идет через ssh с публичным ключом.
При запуске из командной строки:
rsnapshot daily
Все прекрасно работает, лог:
[18/May/2008:12:21:43] /opt/bin/rsnapshot daily: started
[18/May/2008:12:21:43] echo 4953 > /var/run/rsnapshot.pid
[18/May/2008:12:21:43] /opt/bin/cp -al /home/backup/daily.0 /home/backup/daily.1
[18/May/2008:12:23:58] /opt/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh -i /home/backup/keys/pub-key user@host.ru:/home /home/backup/daily.0/host.ru/
[18/May/2008:12:29:38] touch /home/backup/daily.0/
[18/May/2008:12:29:38] rm -f /var/run/rsnapshot.pid
[18/May/2008:12:29:38] /opt/bin/rsnapshot daily: completed successfully
Если тоже самое сделать из крона, то появляются непонятные ошибки.
Мой crontab (admin переименован в root):
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
48 12 * * * root rsnapshot daily
Из системного лога видно, что крон запустил задачу. HDD шуршит пару минут, пока отрабатывает /opt/bin/cp, но как только дело доходит до rsync, последний отказывается работать.
Вот лог rsnapshot:
[18/May/2008:12:48:05] /opt/bin/rsnapshot daily: started
[18/May/2008:12:48:05] echo 4988 > /var/run/rsnapshot.pid
[18/May/2008:12:48:05] mv /home/backup/daily.1/ /home/backup/daily.2/
[18/May/2008:12:48:05] /opt/bin/cp -al /home/backup/daily.0 /home/backup/daily.1
[18/May/2008:12:50:50] /opt/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --log-file=/opt/var/log/rsync --rsh=/usr/bin/ssh -i /home/backup/keys/pub-key user@host.ru:/home /home/backup/daily.0/host.ru/
[18/May/2008:12:50:52] /opt/bin/rsnapshot daily: ERROR: /opt/bin/rsync returned 12 while processing user@host.ru:/home/
[18/May/2008:12:50:55] touch /home/backup/daily.0/
[18/May/2008:12:50:55] rm -f /var/run/rsnapshot.pid
[18/May/2008:12:50:55] /opt/bin/rsnapshot daily: ERROR: /opt/bin/rsnapshot daily: completed, but with some errors

Лог rsync:
2008/05/18 12:50:52 [4993] rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
2008/05/18 12:50:52 [4993] rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.2]
Проверял несколько раз. Из командной строки работает, через крон не хочет. Рыл много в сети, куча ссылок с подобными проблемами, но либо вразумительного решения нет, либо ошибки, которых в своем случае я не наблюдаю. Часто проблемы с кроном возникают из-за того что многие переменные окружения в crontab не работают, но вроде все пути указаны полностью.

P.S. название хоста и пользователя изменены на user@host.ru

japplegame
18-05-2008, 11:56
После нескольких дней непрерывных боев с rsync, стоило только запостить проблему на форум, как неожиданно удалось найти грабли. :D

Оказывается бузил не rsync, а ssh. Дело в том, что ssh перед соединением желает удостовериться можно ли вообще соединяться с указанным хостом. Я, зная об этой привычке ssh, заблаговременно поместил в файлик ~/.ssh/known_hosts (в моем случае ~ = /usr/local/root) соответствующую строку для нужного хоста. Поэтому из командной строки все прекрасно работало. А при запуске через крон, этот файл терялся, так как переменная HOME указывала совсем на другое место. Вылечилось изменением в crontab строки HOME=/ на HOME=/usr/local/root