【发布时间】:2012-08-18 18:35:32
【问题描述】:
试图让 monit 监控我们编写的自定义守护程序,但它无法与 bash 停止/启动脚本一起使用。如果我从命令行手动运行停止/启动脚本,它每次都能 100% 完美运行。如果它通过 monit 执行,则变量为空。从我遇到问题的脚本中提取:
GETPID=$(ps aux | grep unicorn | grep master | cut -d" " -f7)
echo "getPID : $GETPID"
echo $GETPID > $PIDFILE
$GETPID 变量在使用 monit 执行时为空。手工完美。
有人有什么想法吗?
【问题讨论】:
-
在文件的第一行添加一个shebang行
#!/bin/sh会有帮助吗? -
第一行有一个#!/bin/bash,上面的代码实际上只是脚本的摘录。
-
只是出于好奇:为什么不使用
pgrep或pidof来获取您的PID? -
尝试在脚本中将
$PATH回显到文件中。手动运行它,然后在监视器内运行。如果$PATH在monit 中运行时为空,则必须在脚本中提供ps的完整路径。有关启动非交互式脚本的更多信息,请参阅stackoverflow.com/questions/819944/…。 -
在脚本顶部,将stderr重定向到一个文件(
exec 2>/tmp/log),并调用set -x;然后在脚本运行后检查日志文件。编辑问题中特别有趣的任何内容——这将显示建议的问题所询问的空 PATH 情况(通过让 ps 等命令向 stderr 发出未找到的错误)。