Здравствуйте, интересная строка в моем crontab выглядит так: (отредактировал и сохранил ее, запустив crontab -e)
23 * * * * rsync -av --delete root@example.de:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
но .. эта строка ничего не делает (на 24-й минуте полоса пропускания не используется, никаких выходных данных нет в файле журнала) может кто-нибудь сказать мне, что не так?
Кстати: аутентификация для сервера работает через ключ pgp без пароля. вот почему пользователь должен быть никлас
РЕДАКТИРОВАТЬ:
побежал type rsync
который вернулся /usr/bin/rsync
но это уже на пути:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
РЕДАКТИРОВАТЬ2:
создан / usr / bin / backup, содержащий:
rsync -av --delete root@example.com:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
chmod + x'ed его и изменил запись в chrontab на
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
16 * * * * /usr/bin/backup
все же ... он не работает, хотя / var / log / syslog sais:
Aug 1 15:16:01 niklas-desktop CRON[9421]: (niklas) CMD (/usr/bin/backup)
пожалуйста помоги
РЕДАКТИРОВАТЬ3:
Изменение
rsync -av --delete root@example.com:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
к
/usr/bin/rsync -av --delete root@example.com:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
как и ожидалось, не меняет (неудовлетворительного) результата. однако `помещение echo 'xyz'> log записывает xyz в файл журнала
так что ... как вы могли догадаться ... моя проблема все еще не решена.
добавление || echo "rsync died with error code $?"
в сценарий резервного копирования вернулся:
rsync died with error code 5
который как http://wpkg.org/Rsync_exit_codes предлагает означает «Ошибка запуска клиент-серверного протокола», так что я думаю, что что-то не так с ssh. снова я использую ключ pgp с паролем, но этот пароль по умолчанию разблокируется связкой ключей при запуске, так что я могу ssh root@example.com без ввода пароля. Можно ли отправить rsync пароль ключа ssh?
Вы включили поле имени пользователя в свой crontab. Но это поле существует только в системном crontab (/etc/crontab
), а не в crontab для каждого пользователя, который вы редактируете с помощью crontab -e
. Так что отредактируйте crontab с помощью crontab -e
как пользователь niklas
, и сделайте содержимое
23 * * * * rsync -av --delete root@example.de:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
Пользователь, которого вы запускали crontab -e
as должен был получить письмо с сообщением об ошибке (жалуясь, что niklas
не является допустимой командой). Если этого не произошло, возможно, проблема в настройке вашей почты.
Поместите полный путь к rsync даже к вашему / usr / bin / резервное копирование, поэтому строка в этом файле будет начинаться
/usr/bin/rsync <your other options>
И попробуйте поставить строку вроде
logger -t my_backup Hello from /usr/bin/backup
в ваш / usr / bin / скрипт резервного копирования и посмотрите, будет ли что-нибудь записано в / var / log / messages (или в другой файл журнала, в зависимости от настроек вашего системного журнала). В качестве альтернативы вы можете заменить регистратор на
echo "Hello from /usr/bin/backup" >/tmp/backuptest
О, иногда SELinux может вызывать проблемы, с которыми вы столкнулись. Это используется?
Надеюсь это поможет.
РЕДАКТИРОВАТЬ: Сделайте вашу строку / usr / bin / backup rsync похожей на
/usr/bin/rsync <your options> || echo "rsync died with error code $?" >> your_log
Возможно, мы поймем, почему rsync так расстроен.
ЕЩЕ ЕЩЕ ОДИН РЕДАКТИРОВАТЬ: ОК, код ошибки rsync 5. Это означает
rsync error: error starting client-server protocol
В большинстве случаев это происходит из-за неправильного пароля, даже если сообщение выглядит более загадочным.
Если вы вручную запустите сценарий rsync от имени niklas, это сработает, верно?
РЕДАКТИРОВАТЬ 3: Заметил ваше упоминание о брелок для ключей. Я думаю, что cron не использует тот же набор ключей, что и пользователь niklas во время вашего входа в систему. Вот почему логин идет p00f при попытке запустить его из cron. Не могли бы вы вместо этого использовать ключ RSA без пароля и просто ограничить его запуском rsync?
РЕДАКТИРОВАТЬ 4: Использование RSYNC_PASSWORD переменная окружения. Это можно сделать, поместив это в начало сценария резервного копирования:
export RSYNC_PASSWORD="myprecioussssssss"
или если вы хотите сохранить пароль в текстовом файле, создайте файл и укажите --password-файл вариант для rsync.
Если это не сработает, вы можете предоставить -e 'ssh -o IdentityFile = / путь / к / ваш_файл вариант для rsync.
Вам может потребоваться полный путь для команды rsync.
Например, в Fedora 13 вы должны заменить rsync на / usr / bin / rsync
в моем случае (ubuntu) создаю сценарий оболочки и помещаю туда команду rsync вместо того, чтобы запускать ее из crontab, поскольку команда сделала трюк. Теперь синхронизация работает как шарм.