这里有一个片段中的一个庆典脚本我写日志CPU载荷:

#!/bin/bash
# ... irrelevant nonsense ...
cmd1="/usr/bin/mpstat -P ALL | egrep '(AM|PM)([[:space:]]+)(0)' | tr -s ' ' | cut -d' ' -f4"
ldsys="$(echo $cmd1 | /bin/sh)"
# ... irrelevant nonsense ...

$ldsys 设置适当的时候脚本是执行以往从控制台。它是金色的。 这里的问题: 在执行时与务, $ldsys 是空的。

我已经试着数以百万计的事情过去三个小时来试图获得这件事的工作。但是我找不到 任何东西.没有任何人有任何想法?


注:

  • /usr/bin/mpstat 可以 可以通过执行 cron。我测试通过加入一个虚假的任务,以消防的每一分钟: /usr/bin/mpstat -P ALL >> somefile 和检查的输出。它的工作。

  • egrep, tr, , cut 所有功能在cron。

  • 我想这真的有做eval转让公约》...但我不知道为什么这将是一个问题,考虑到这是一个相对的基本构造... 在尝试亚当的建议,我现在不知道该怎么觉得...

编辑: 剥离出来 eval 使用...仍然没有骰子。

有帮助吗?

解决方案

你的问题是来自 mpstat.当它从命令提示,它输出的时间与AM/PM。它不会时,它的运行过 cron.作为 ennuikiller 建议,它可能是一个环境问题。在我的系统 echo $LANG 给"en_US。UTF-8"的命令,但没有什么时候跑 cron.这个或其他一些环境变量影响的方式 mpstat 输出时间,所以当你 grep 为"(AM|PM)"不找到它。

顺便说一句,为什么你不就是这样做:

ldsys=$(/usr/bin/mpstat ... )

没有分配到"cmd1", eval, , echo 与管道 sh?

其他提示

你是遇到两个以下问题:

This is perhaps our number one complaint with cron. When you login to Unix, startup scripts setup your environment. You can see your environment with the commands "printenv" or "env". On the other hand, cron sets up only a sparse environment 

通常输出的任何程序发送给STDOUT(标准)以及通常结束在别人的屏幕显示。对于工作开始时,STDOUT将被引导到当地邮件系统,这意味着任何产生的输出的通过一个定时的工作将会邮寄给用户拥有的工作

你有没有试图消除的 eval?

而不是的

ldsys=`eval $cmd1`

尝试

ldsys=`echo "$cmd1" | /bin/sh`

ldsys="$(echo $cmd1 | /bin/sh)"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top