web-dev-qa-db-ja.com

rootの代わりにユーザーとしてrc.localからスクリプトを実行する

サーバーが起動するたびにスクリプトを実行したい。問題は、スクリプトを実行するには特定のユーザーになる必要があることです。rootで実行しようとすると、特定のパッケージ(Rubyなど)を見つけることができません。

Xxx user01に変更してみます。

Sudo su user01
/etc/init.d/script start

ただし、これは機能しません。

28
Philip

スクリプトでSudo su user01を実行しても、結果のシェルに次のコマンドが送信されるわけではありません。実際、これは新しいシェルがuser01として生成され、終了しないことを意味します。

2つのこと:

  • -c 'command...'のように、su user01 -c '/etc/init.d/script start'引数をsuに渡すことにより、別のユーザーとしてコマンドを実行できます。
  • Rc.localから/etc/init.dを使用するサービスを開始することは、正しいことではありません。 chkconfigupdate-rc.dなどの配布ツールを使用して、起動時にサービスを有効にします。また、rootとして開始してはならない/etc/init.d内のジョブも必要ありません。ジョブ自体は別のユーザーアカウントに自由にフォークできますが、rootで呼び出す必要があります。
31
Kyle Smith

あなたは/etc/crontabに何かを入れてそれを実行することができます@reboot

@reboot username /etc/init.d/script start
8
user9517

次のように、Sudoを介してコマンドを実行するだけです。

Sudo -H -u user01 /etc/init.d/script start

-Hは、HOME環境変数をユーザーの環境変数に設定します。

-uは、実行するユーザー名を指定します

4
joetek

Sudoerではrequiretty(ユーザーのログインを強制する)のため、Sudoでそのスクリプトを実行することはできません。無効にすることもできますが、これはやや危険です

また、runsuidと呼ばれるやや古いツールもあります: http://freecode.com/projects/runsuid

HTH

0
sebelk