我正在尝试使用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'};