sensu クライアントがあり、チェック スクリプトの 1 つでその PATH をデバッグすると、次のように表示されます。
/sbin:/usr/sbin:/bin:/usr/bin:/etc/sensu/plugins:/etc/sensu/handlers
この PATH を sensu 用にカスタマイズするにはどうすればよいですか。たとえば、/usr/local/bin を PATH の最後に追加したいので、次のようになります: /sbin:/usr/sbin:/bin:/usr/bin:/etc /sensu/plugins:/etc/sensu/handlers:/usr/local/bin
私は多くの方法を試しましたが、成功しませんでした.
- sensu ユーザーの SHELL を (デフォルトの /bin/false ではなく) /bin/bash に設定し、次の行を使用して、sensu ユーザーのホーム ディレクトリ /opt/sensu の下に .bashrc|.profile を追加します。
export PATH=$PATH:/usr/local/bin
- /etc/default/sensu を編集し、この行を追加します
PATH=$PATH:/usr/local/bin
- https://sensuapp.org/docs/latest/clientsを読んで、/etc/default/sensuに設定
USER=ec2-user
し、sensu クライアントを再起動した後、sensu クライアント プロセスが ec2-user によって実行されていることがはっきりとわかりますが、驚くべきことに、 、PATH は ec2-user と同じではありません
上記の 1、2、および 3 はすべて機能しませんでした。python で記述されたチェック スクリプトでは、次の行があります。
from subprocess import call, Popen, PIPE
import os
import sys
import shlex
import platform
print os.environ["PATH"]
proc = Popen(['which', 'python'],
stdout=PIPE,
stderr=PIPE)
out, err = proc.communicate() #does not return until the process has terminated.
print(out)
print(err)
#print(platform.__dict__)
print(platform.python_version())
proc = Popen(['whoami'],
stdout=PIPE,
stderr=PIPE)
out, err = proc.communicate() #does not return until the process has terminated.
print(out)
print(err)
sys.exit(0)
出力は次のとおりです。
/sbin:/usr/sbin:/bin:/usr/bin:/etc/sensu/plugins:/etc/sensu/handlers
/usr/bin/python
2.6.6
ec2-user
Pythonチェックスクリプトに次の行を書きましたが、更新してください。
proc = Popen(['bash','--login', '-x'], stdout=PIPE, stderr=PIPE)
out, err = proc.communicate()
print(out)
print(err)
私はそれが出力されたのを見ました:
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/etc/sensu/plugins:/etc/sensu/handlers:/usr/local/sbin:/usr/local/bin
しかし、他の出力は驚くべきことに.... "which python" -> /usr/bin/python, "python --version" -> 2.6.6
助けを求める....