SFTP в задании cron

SFTP в задании cron

Проблема

  1. Я хочу автоматизировать загрузку файла через SFTP
  2. Я настроил SFTP-сервер и механизм шифрования
  3. Я создал простой bash-скрипт -скрипт.sh
  4. Я добавил запись в cron для скрипта

Сценарий,скрипт.sh:

#!/bin/bash  
sftp user@server:/home/user/file.txt  
exit 0

Выполнение скрипта вручную работает нормально (текстовый файл сохраняется в домашнем каталоге), но добавлениескрипт.sh(с соответствующими разрешениями) crontabничего не делает.

Запись в crontab:

* * * * * /home/user/script.sh

Для аутентификации я ssh-keygenсоздавал набор ключей (закрытый, открытый) и настраивал перекрестную аутентификацию на SFTP-сервере.

Для автоматизации скрипта я использовал keychainаутентификацию без пароля.

В настоящее время

В настоящее время у меня есть скрипт под названиемскрипт.shрасположен в"пользователь"домашний каталог ( /home/user/).

При ручном запуске rootскрипт получает файл с SFTP-сервера и помещает его в /home/user/.

Это действие не выполняется при запуске из cronзадания. В cronкоманда sftpвозвращает ошибку.

Идеи?

Работаю над этим

  1. ИзменениеДОМпеременная /etc/crontabне решила проблему
  2. Указание полных путей вскрипт.shне решило проблему
  3. ЗаявляяПУТЬпеременная вскрипт.shне решило проблему
  4. Я обнаружил ошибку в sftpкоманде - это255

Однако выполнение скрипта вручную ( ./script.sh) по-прежнему работает безупречно...

решение1

Рабочий пример:

простой скрипт с именем hello.sh, который добавляет к текстовому файлу слово hello (использует полные пути для каждой команды):

примечание myuserимя вашего пользователя

#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt

Сделайте скрипт исполняемым с помощьюchmod +x hello.sh

Запись в crontab, которая запускается каждую минуту, вы можете изменить ее в соответствии со своими потребностями:

* * * * * /home/myuser/hello.sh

Некоторые подробности:

  • Каждое задание cron выполняется от имени пользователя, который его зарегистрировал. Если пользователь root регистрирует задание cron, это задание будет выполняться с привилегиями root.

  • Если задание cron регистрирует не пользователь root, оно будет запущено с привилегиями вышеупомянутого пользователя; если задание требует привилегий root, оно завершится ошибкой, поскольку оно инициировано не пользователем root...

  • Лучше вызывать команды и скрипты, используя полные пути, чтобы быть уверенным, что cron сможет найти и вызвать их правильно, в противном случае может произойти сбой без полезной обратной связи.

Связанный контент