サーバーが起動するたびにスクリプトを実行したい。問題は、スクリプトを実行するには特定のユーザーになる必要があることです。rootで実行しようとすると、特定のパッケージ(Rubyなど)を見つけることができません。
Xxx user01に変更してみます。
Sudo su user01
/etc/init.d/script start
ただし、これは機能しません。
スクリプトでSudo su user01
を実行しても、結果のシェルに次のコマンドが送信されるわけではありません。実際、これは新しいシェルがuser01として生成され、終了しないことを意味します。
2つのこと:
-c 'command...'
のように、su user01 -c '/etc/init.d/script start'
引数をsuに渡すことにより、別のユーザーとしてコマンドを実行できます。chkconfig
やupdate-rc.d
などの配布ツールを使用して、起動時にサービスを有効にします。また、root
として開始してはならない/etc/init.d内のジョブも必要ありません。ジョブ自体は別のユーザーアカウントに自由にフォークできますが、rootで呼び出す必要があります。あなたは/etc/crontab
に何かを入れてそれを実行することができます@reboot
@reboot username /etc/init.d/script start
次のように、Sudoを介してコマンドを実行するだけです。
Sudo -H -u user01 /etc/init.d/script start
-Hは、HOME環境変数をユーザーの環境変数に設定します。
-uは、実行するユーザー名を指定します
Sudoerではrequiretty(ユーザーのログインを強制する)のため、Sudoでそのスクリプトを実行することはできません。無効にすることもできますが、これはやや危険です
また、runsuidと呼ばれるやや古いツールもあります: http://freecode.com/projects/runsuid
HTH