web-dev-qa-db-ja.com

「標準のinはttyでなければならない」というエラーを出すBash& 'su'スクリプト

皆さん、特定のコマンドを別のユーザーとして実行するbashスクリプトに問題があります。

背景:Linuxボックス(CentOS)で実行するスクリプトは非常にシンプルで、 hudson-ci アプリケーションを起動しています。

declare -r HOME=/home/hudson
declare -r RUNAS=hudson
declare -r HOME=/home/hudson
declare -r LOG=hudson.log
declare -r PID=hudson.pid
declare -r BINARY=hudson.war

su - ${RUNAS} -c "Nohup Java -jar ${HOME}/${BINARY} >> ${HOME}/${LOG} 2>&1; echo $! > ${HOME}/${PID}" &

これはスクリプトの要約バージョンであり、実行すると、スクリプトは "標準でttyでなければならない"で終了します。私が間違っている可能性があることについてのアイデアはありますか?私は試しました Dr Google そしてすべてのアドバイスは今のところ役に立ちませんでした。

その他のリファレンス: Mandriva Linux 'su' bug

7
shaond

/ etc/sudoersファイルで、「Defaultsrequiretty」という行をコメントアウトしてみてください。そうすることにはセキュリティ上の影響があるため、代わりに次の行を追加することをお勧めします。

Defaults:[username] !requiretty

このファイルを編集するには、通常のテキストエディタではなく、必ずvisudoコマンドを使用してください。

12
Eric3