【问题标题】:Monit losing bash variable?监视丢失 bash 变量?
【发布时间】: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,上面的代码实际上只是脚本的摘录。
  • 只是出于好奇:为什么不使用pgreppidof 来获取您的PID?
  • 尝试在脚本中将$PATH 回显到文件中。手动运行它,然后在监视器内运行。如果$PATH 在monit 中运行时为空,则必须在脚本中提供ps 的完整路径。有关启动非交互式脚本的更多信息,请参阅stackoverflow.com/questions/819944/…
  • 在脚本顶部,将stderr重定向到一个文件(exec 2>/tmp/log),并调用set -x;然后在脚本运行后检查日志文件。编辑问题中特别有趣的任何内容——这将显示建议的问题所询问的空 PATH 情况(通过让 ps 等命令向 stderr 发出未找到的错误)。

标签: bash monit


【解决方案1】:

感谢您的帮助。问题是 rvm 安装中的独角兽路径。

【讨论】:

    【解决方案2】:

    一般来说,解析psls 的输出并不是一个好主意。

    您可以在proc 文件系统上使用find 编写一个简单的pgrep

    # find /proc/ -maxdepth 2 -type l -name exe -lname '/bin/bash' -printf '%h\n' 2>/dev/null | sed 's/.*\///'
    3580
    3595
    9504
    9869
    10054
    10156
    10193
    # pgrep bash
    3580
    3595
    9504
    9869
    10054
    10156
    10193
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多