Проблема
- Я хочу автоматизировать загрузку файла через SFTP
- Я настроил SFTP-сервер и механизм шифрования
- Я создал простой bash-скрипт -скрипт.sh
- Я добавил запись в 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
возвращает ошибку.
Идеи?
Работаю над этим
- ИзменениеДОМпеременная
/etc/crontab
не решила проблему - Указание полных путей вскрипт.shне решило проблему
- ЗаявляяПУТЬпеременная вскрипт.shне решило проблему
- Я обнаружил ошибку в
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 сможет найти и вызвать их правильно, в противном случае может произойти сбой без полезной обратной связи.