crontab 内のシェル スクリプト

crontab 内のシェル スクリプト

期待どおりにコマンド プロンプトから次のシェル スクリプトを実行できます。

/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

関連情報