我有一个 sensu 客户端,我在我的一个检查脚本中调试了它的 PATH,它显示:
/sbin:/usr/sbin:/bin:/usr/bin:/etc/sensu/plugins:/etc/sensu/handlers
如何为 sensu 自定义此 PATH,例如:我想将 /usr/local/bin 添加到 PATH 的末尾,结果为:/sbin:/usr/sbin:/bin:/usr/bin:/etc /sensu/plugins:/etc/sensu/handlers:/usr/local/bin
我尝试了很多方法但没有成功,我尝试过:
- 将 sensu 用户的 SHELL 设置为 /bin/bash(而不是默认的 /bin/false),并在 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,我
USER=ec2-user
在 /etc/default/sensu 中设置,重新启动 sensu 客户端后,我清楚地看到 sensu 客户端进程正在由 ec2-user 运行,但是,令人惊讶的是, PATH 与 ec2-user 不同
上面的所有 1,2 和 3 都不起作用,在我用 python 编写的检查脚本中,我有这些 lins:
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
请求帮助....