скрипт оболочки в crontab

скрипт оболочки в crontab

Я могу запустить следующий скрипт оболочки из командной строки, как и ожидалось:

/bin/sh -xv /home/shantanu/backup_transfer.sh 

Но когда я устанавливаю его в cron, он не выполняется правильно. Есть 2 команды. ssh -t[email protected]«sudo ls» и sudo rsync -avze на другой сервер.

Почему скрипт оболочки может не работать в cron, если он успешно выполняется в командной строке?

$ which sh
/bin/sh

Правильную ли среду я использую?

Обновлять:

Error for the first ssh -t command:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo

Error for the second sudo rsync command: 
sudo: sorry, you must have a tty to run sudo

При запуске скрипта в командной строке ошибок не возникло.

решение1

Чтобы исправить ошибку sudo tty, вам необходимо изменить файл /etc/sudoers на хосте, на котором вы запускаете команду sudo.

#Here is an example of how to turn off the requirement of a tty for a user called "USERNAME"
Defaults:USERNAME !requiretty

решение2

Обновление /etc/sudoers и вставка !requiretty — лучший вариант. Однако в некоторых случаях у вас может не быть доступа к удаленной системе для включения/отключения requiretty в /etc/sudoers.

В таких ситуациях вы можете использовать двойной tt как обходной путь. Двойной tt работает даже в cron.

ssh -tt user@remoteserver /some/dir/remotecommand

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