rootではなくユーザーとしてrc.localからスクリプトを実行します


26

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

xxx user01に変更しようとしました。

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

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


初期化スクリプトを投稿しますか?
量子

ログがありますか?
ドム

なぜsurcスクリプトで単純に使用しないのですか?
マット

回答:


30

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

2つのこと:

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


4

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

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

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

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


0

確かに、sudoersのrequiretty(ユーザーのログ記録を強制する)のために、sudoでそのスクリプトを実行することはできません。無効にすることもできますが、これは多少危険です

また、runsuidと呼ばれるやや古いツールがあります。 http

HTH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.