2

root権限を必要とするRubyで書かれた特定のスクリプトがあります。他のほとんどのプロセスはそれを必要としないので、Monitで簡単にセットアップできました。これじゃない。

サーバーは386でリッスンする必要があり、このポートはルートでのみ使用できます。理由の詳細については説明しません。1)私は低レベルの人ではないため、2)sudoを使用した場合はこれまで問題なく機能していました。

monit構成ファイルは単純で、次のようになります。

set logfile syslog facility LOG_daemon # Default facility is LOG_USER
set mailserver smtp.sendgrid.net
        username "blah", password "blah"
        with timeout 20 seconds
set alert blah@bleh.com
set logfile /home/deploy/monit.log


check process ldapserver
     with pidfile /var/pids/ldap_server.pid
     start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
     stop program = "/bin/sh"

注:このプロセスには停止プログラムがないため、停止プログラムに/ bin/shを入れました。

私がこのように置くならば:

start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"

起動に失敗します。ヒントはありません。

start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb

同様に失敗します。出力なし。

start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'

起動に失敗します。

また、stderrとstdoutをキャプチャするためにを使用して出力をリダイレクトしようとし> ~/out.log 2 > &1ましたが、機能していないようです。

今、私はデプロイユーザーの下で監視を開始していますが、これは制限されています。したがって、LDAPサーバーをrootとして実行する必要がありますが、実行するのは非常に困難です。

誰かが私を教えてもらえますか?

乾杯、

M>

4

1 に答える 1

6

sudoまたはを使用suしてスクリプトを「デプロイ」ユーザーとして実行しても役に立ちません(monitはとにかくそのユーザーとしてすでに実行されており、rootとして実行する必要があるため)。

また、sudoはデフォルトでパスワードの入力を求めますが、monitはこれを提供できません。

これを解決する1つの方法は、ファイルを作成し、次の内容/usr/bin/startLDAPServer.shで実行可能( )にすることです。chmod a+x /usr/bin/startLDAPServer.sh

#!/bin/sh
/usr/local/bin/ruby /var/lib/ldap_server.rb

/etc/sudoers次に、次の行をファイルに追加します。

deploy ALL =NOPASSWD:/usr/bin/startLDAPServer.sh

その後、次を使用できます。

start program = "/usr/bin/sudo /usr/bin/startLDAPServer.sh"

モニットで。

于 2011-12-05T17:25:32.043 に答える