У меня есть скрипт на удаленном сервере (bServer), который использует SSH к центральному серверу (назовем его cServer), и запускаю скрипт, который далее SSH на 2 других сервера (server13 / server14). На каждом из этих серверов запускается скрипт, который создает файл.

У меня есть DSA SSH-ключи, настроенные с cServer на server13/14 Затем cServer извлекает созданные файлы с сервера 13/14, а затем bServer извлекает их из cServer.

Это отлично работает при запуске вручную.

Однако, когда я планирую задание на bServer в cron , файл с server14 не перетаскивается на cServer.

Вот что более интересно: файл с сервера 13 не переносится с cServer на bServer, когда команда ssh или scp на server14 присутствует в том же сценарии.

Если они у меня есть в отдельных сценариях, файл server13 возвращается в bServer нормально, но файл для server14 только создается, а не передается обратно в cServer.

И server13, и server14 работают под одной и той же сборкой SunOS.

Я прочитал так много разных решений для похожих проблем, но не нашел решения.

Есть идеи, как это решить?

3 ответа3

1

Возможно, проблема в переменных окружения, которые используются cron . Запустите "env> out.txt" из cron и из shell и сравните результаты.

Посмотрите это решение https://stackoverflow.com/questions/2229825/where-can-i-set-environment-variables-that-crontab-will-use

Вы можете попробовать добавить исходный файл source /etc/profile в начале вашего скрипта. Также вы можете попробовать запустить скрипт с #!/bin/bash -l

1

Выполняя работу через cron, вы не сохраняете свою среду. Если вы уже вошли на удаленный сервер как пользователь, владеющий сценарием cron, вы можете попытаться в целях диагностики запустить этот же сценарий с помощью команды at , которая вместо этого выполняет.

Если вы поместили свои команды в исполняемый скрипт с именем my_script, следующая команда

 at -f my_script 0936.00

выполнит команду my_script в 9 часов 36 минут. Если это сработает, вы будете знать, что в cron вам не хватает какого-то важного компонента вашей среды.

1

Ни одно из предложенных решений не сработало.

Чтобы это исправить, мне нужно было 2 отдельных задания cron. Тот, который вытягивает файл с сервера 14 на сервер 13, а затем обратно на bServer. Второе задание cron (не будет работать, если в том же задании выполнялся второй скрипт), а затем извлекает файл с сервера13.

Очень странно. Жаль, что я не смог найти более элегантное решение, хотя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .