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

标签 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

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

有什么提示吗?

最佳答案

从你的工作 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 一书评论说,不推荐使用反引号替换命令 ;-)

健康教育

关于linux - 使用 lsof 的脚本在 shell 上运行良好,而不是在 cron 上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628297/

相关文章:

c - 为什么 "system"的返回与被调用脚本的返回不匹配?

linux - 在 Bash 中检查 sudo(带有 if 语句的脚本)

cron - APScheduler:完成上一个工作后触发新工作

python - 从 npm 命令激活虚拟环境不起作用

linux - bash 脚本中的 awk 脚本

php - cron mysqldump 说不使用密码

linux - Ubuntu 10.04 LTS Cron 作业不工作

linux - Zend框架主页

c - 如何强制 Linux C 可执行文件访问磁盘以获取数据

bash - 为半可移植 shell 脚本制作弹出菜单的最佳(?)方法?