14

我有一个小脚本可以计算 Linux 上打开的文件并将结果保存到平面文件中。我打算每分钟在 Cron 上运行一次,以便稍后收集结果。脚本如下:

/bin/echo "Timestamp: ` date +"%m-%d-%y %T"` Files: `lsof | grep app | wc -l`"

crontab 是这样的:

*/1 * * * * /usr/local/monitor/appmon.sh >> /usr/local/monitor/app_stat.txt

如果我从 shell ./script.sh 运行,它运行良好并输出为:

Timestamp: 01-31-13 09:33:59 Files: 57

但在 Cron 输出上是:

Timestamp: 01-31-13 09:33:59 Files: 0

不确定是否需要任何权限或类似权限。我也尝试在 lsof 上使用 sudo ,但没有运气。

有什么提示吗?

4

1 回答 1

19

从你的工作命令行,做

which lsof
which grep
which wc
which date

获取每个命令的完整路径并将它们添加到您的 shell 脚本中,生成类似

/bin/echo "Timestamp: `/bin/date +"%m-%d-%y %T"` Files: `/usr/sbin/lsof | /bin/grep app | /bin/wc -l`"

或者您可以设置一个 PATH 变量以在您的脚本中包含缺失值,即

 PATH=/usr/sbin:${PATH}

此外,除非您希望您的脚本在真正的 Bourne Shell 环境中运行,否则请加入 90 年代初期并使用$( cmd ... )cmd 替换的形式,而不是反引号。1995 年出版的 Ksh 93 书指出,命令替换的反引号已被弃用;-)

IHTH

于 2013-01-31T14:51:27.577 回答