NFSの制限とCronの制限の間に立ち往生しているようです。
そのため、シェルスクリプトを実行しているroot cron(RHEL5上)があります。これは、特に、NFSマウントを介していくつかのファイルをrsyncする必要があります。また、NFSマウント上のファイルはモード700のApacheユーザーが所有しているため、rsyncコマンドを実行できるのはApacheユーザーのみです。rootとして実行すると権限エラーが発生します(NFSはまれなケースであり、rootユーザーが全能ではありませんか?)
Rsyncを手動で実行したい場合は、「Sudo -u Apache rsync ...」を使用できますが、cronでSudoが機能しません。「Sudo:申し訳ありませんが、Sudoを実行するにはttyが必要です」と表示されます。
スクリプト全体をApacheとして(つまり、Apacheのcrontabから)実行したくないのは、スクリプトの他の部分がrootを必要とするためです。つまり、Apacheとして実行する必要があるのはその1つのコマンドだけです。また、ファイルのモードを変更したくないのは、他のアプリケーションに大幅な変更が加えられるためです。
Cronから「Sudo-uApache」を実現する方法はありますか?
ありがとう!奪う
su --Shell =/bin/bash --session-command = "/ path/to/command -argument = something"ユーザー名&
私のために働く(CentOS)
su
の代わりにSudo
を使用します。
su -c "rsync ..." Apache
RHELのデフォルトでは、ターミナル(tty)のないプロセスではSudo
は許可されていません。それは/etc/sudoers
で設定されます。
次の手順で、特定のユーザーにttyなしのSudo
を許可できます。
https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user
Apacheとしていじることを永続的に可能にしたい場合:
chsh Apache
これにより、ユーザーのシェルを変更できます
/ etc/crontabに配置し、ユーザーフィールドにrootではなくApacheを指定します