Нет просто протокол или HTTP или TCP в это время. С HTTP можно определить "Путь Ping", который может указать на файл на веб-сервере для проверки не, только веб-сервер и выполнение, но и ожидаемая страница в рендеринге, но это - в основном это. Пороги, тайм-ауты и интервалы все настраиваемы, но снова только для протоколов TCP и HTTP.
Иногда ты слишком много думаешь о вещах.
Rsync не был установлен в удаленной системе.
/ facepalm
sudo
, если задание cron
выполняется как root. -rlptgoD
; удалите и замените на -a
. sudo
предназначено для локального TTY, тогда как параметр -t
для ssh
предназначен для удаленный TTY. Не путайте их. -v
и -q
не противоречат друг другу? stdin
не является TTY; они не запускаются из терминала или эмулятора терминала). EDIT / UPDATE :
cron
работает, а SSH не выделяет его удаленно, так как локального нет. Я предполагаю, что это проблема с ключом ssh. Либо закрытый ключ резервной копии имеет парольную фразу, либо открытый ключ отсутствует в цепочке ключей удаленных пользователей. Может быть, ваша предыдущая попытка использовала ключ, который уже был загружен в вашу связку ключей?
Помещаю это здесь, чтобы я мог вспомнить и поделиться этим трюком:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" user@${HOSTNAME}:/ ${DEST_DIR}
Этот метод, похоже, обходит требование для tty, которое применяется по умолчанию в некоторых системах / etc / sudoers
файл с По умолчанию requiretty
. Эта информация была создана после просмотра этого SO-вопроса и ответов .
В этом ответе они рекомендуют удалить Defaults requiretty
из / etc / sudoers
. Это более простой способ. Однако, если вы не можете изменить удаленный хост / etc / sudoers
, чтобы удалить этот параметр конфигурации, вы можете попробовать заставить локальный rsync
использовать ssh -tt
]. Эта опция для ssh
описана на странице руководства клиента ssh
следующим образом:
Принудительное выделение псевдотерминала. Это можно использовать для выполнения произвольных экранных программ на удаленном компьютере, что может быть очень полезно, например при реализации услуг меню. Несколько опций -t принудительно выделяют tty, даже если ssh не имеет локального tty.
Таким образом, мы заставляем ssh выделить псевдотерминал, чтобы избежать ошибки:
Pseudo-terminal will not be allocated because stdin is not a terminal.
stty: standard input: Inappropriate ioctl for device
sudo: sorry, you must have a tty to run sudo
Затем - rsync-path
заменяется командой, выполняющей следующие действия:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo
- устанавливает линейную дисциплину удаленного терминала как сквозную. Это фактически заставляет его вести себя как канал, который будет использоваться вместо псевдотерминала без -tt
.
Тогда удаленная команда rsync будет sudo / usr / bin / rsync
, который теперь имеет псевдотерминал и будет проходить проверку requiretty
для sudo
.