Я использую rsync для резервного копирования моего удаленного сервера на моем локальном устройстве, но когда я объединяю его с заданием cron, у меня истекает время ожидания ssh. Чтобы было ясно, данные хранятся на удаленном сервере, и я хочу, чтобы они хранились на моем локальном сервере. Запрос на резервное копирование должен быть отправлен с моего локального сервера на удаленный сервер.
Команда для резервного копирования данных работает, когда я просто набираю ее в терминале следующим образом:
rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP
но когда я совмещаю это с такой работой cron:
10 11 * * * rsync -chavzP --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP
время соединения ssh истекло. Когда cronjob выполняет, он отправляет письмо пользователю root с таким выводом:
From local.xx.xx.xx Tue Jul 2 11:20:17 2013
X-Original-To: username
Delivered-To: username@username.local
From: username@username.local (Cron Daemon)
To: username@username.local
Subject: Cron <username@server> rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=username>
X-Cron-Env: <USER=username>
X-Cron-Env: <HOME=/Users/username>
Date: Tue, 2 Jul 2013 11:20:17 +0200 (CEST)
ssh: connect to host IP_ADDRESS port XX: Operation timed out
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [receiver=2.6.9]
Таким образом, команда rsync работает только при вводе в терминале, но не при использовании cronjob. Кто-нибудь может это объяснить?
Когда вы запускаете команду из cron, она не имеет доступа к информации о вашей среде, как если бы она была запущена из оболочки. Это означает, что он не находит ваш ключ ssh или любые другие переменные среды, которые вы используете для настройки своего агента SSH.
Если вы используете ключ без пароля, измените строку rsync на это:
rsync -chavzP -e "ssh -i /Users/username/.ssh/YOUR_PRIVATE_KEY_HERE" --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP