首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Crontab运行Jstack -F $Thread_NID

使用Crontab运行Jstack -F $Thread_NID
EN

Stack Overflow用户
提问于 2013-11-14 12:10:52
回答 2查看 611关注 0票数 0

我已经创建了一个Unix Shell脚本,在该脚本中,当cpu使用率超过80%时,我尝试获取线程转储。

为了计算cpu使用率,我使用mpstat 1 1|tail -1并从中获取cpu空闲使用率。

然后我找到了基于top -b -n1 -H的顶级Java线程,并使用了jstack -F $Thread_Nid,thread_nid就是我们从top-b -n1 -H得到的pid。

现在的问题是

代码语言:javascript
复制
JSTACK_OUTPUT=$(jstack -F $Thread_Nid)

echo "$JSTACK_OUTPUT" >> $logfile

当我手动运行脚本时,我会得到日志文件中的jstack输出,但是当我通过crontab运行脚本时,Jstack输出不会写入日志文件。

无论是手动还是通过Crontab都是在相同的用户名下运行脚本,当脚本运行时,我通过检查top命令中的用户名来验证这一点。

请让我知道我做错了什么。

EN

回答 2

Stack Overflow用户

发布于 2013-11-14 13:28:36

正如您提到的,脚本在手动执行时运行良好,但在crontab中失败,您似乎错过了它的目录。当您将脚本保存在crontab中时,检查是否提到了路径名。

这是错误的:30 08 10 06 * backup.sh

这是对的:30 08 10 06 * /home/ramesh/full-backup.sh

票数 0
EN

Stack Overflow用户

发布于 2020-12-15 13:47:55

因为,当我们从终端运行时,我们不需要传递jstack包所在的java home的完整路径。

只需使用以下命令:

代码语言:javascript
复制
#which jstack

您将获得以下jstack路径:

代码语言:javascript
复制
~/jdk1.7.0_79/bin/jstack

在脚本中使用以下代码:

代码语言:javascript
复制
~/jdk1.7.0_79/bin/jstack $pid
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19969403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档