在 ps-watcher 配置文件中调用环境变量

在 ps-watcher 配置文件中调用环境变量

我正在尝试使用ps-观察者监控我的系统并确保给定数量的工作线程正在执行任务。如果我将工作线程的数量硬编码到 ps-watcher 的配置文件中,它会运行良好。但是我希望从名为 WORKERS 的环境变量中提取工作线程的数量。这看起来很简单,但事实证明很麻烦。

这是一个有效的示例配置文件:

[myProg]
  trigger = $count<5
  action = /home/ubuntu/startWorkers.sh

我从 ps-watcher 的 man 中摘取了下面的内容:

此参数指定触发流程操作的条件。该条件使用 Perl eval() 进行评估,因此应返回与 Perl 表达式中的“true”等同的内容。

这让我觉得我应该$ENV{VARIABLE}像在 Perl 中一样使用。所以我尝试了以下操作:

[myProg]
  trigger = $count<$ENV{WORKERS}
  action = /home/ubuntu/startWorkers.sh

我的 ps-watcher 日志记录了以下内容:

在 (eval 6) 第 1 行 (#1) 处,在连接 (.) 或字符串中使用未初始化的值 (W 未初始化) 未定义的值被用作已定义值。它被解释为“”或 0,但这可能是一个错误。要隐藏此警告,请为您的变量分配已定义的值。为了帮助您找出未定义的内容,perl 将尝试告诉您未定义的变量(如果有)的名称。在某些情况下,它无法做到这一点,因此它还会告诉您在哪个操作中使用了未定义的值。但请注意,perl 会优化您的程序,警告中显示的操作不一定会在您的程序中逐字出现。例如,“that $foo”通常会被优化为“that " . $foo”,并且警告将引用连接 (.) 运算符,即使您的程序中没有 .。

我有点不知所措。如能得到任何帮助我将不胜感激。

答案1

我同意单引号的想法,但也要通过在print "$ENV{'WORKERS'}\n";eval 之前执行 a 来仔细检查变量是否确实已导出。也许您没有将变量导出到子级中。

答案2

也许环境变量周围有单引号?

$ENV{'WORKERS'}; 

相关内容