期待どおりにコマンド プロンプトから次のシェル スクリプトを実行できます。
/bin/sh -xv /home/shantanu/backup_transfer.sh
しかし、cronで設定すると、正しく実行されません。コマンドは2つあります。ssh -t[メールアドレス]「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 エラーを修正するには、sudo コマンドを発行しているホスト上の /etc/sudoers ファイルを変更する必要があります。
#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 を挿入するのが最善のオプションです。ただし、場合によっては、リモート システムにアクセスできず、/etc/sudoers で requiretty を有効/無効にできないことがあります。
このような状況では、回避策としてダブル tt を使用できます。ダブル tt は cron でも機能します。
ssh -tt user@remoteserver /some/dir/remotecommand