使用lsof的脚本在shell上运行良好而不在cron上运行

时间:2013-01-31 14:37:00

标签: linux shell cron lsof

我有一个小脚本在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

不确定是否需要任何权限或类似权限。我在没有运气的情况下尝试使用sudo on lsof。

任何提示?

1 个答案:

答案 0 :(得分:13)

从您的工作cmd行

,执行

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 var以在脚本中包含缺失值,即

 PATH=/usr/sbin:${PATH}

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

IHTH