我已经创建了一个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。
现在的问题是
JSTACK_OUTPUT=$(jstack -F $Thread_Nid)
echo "$JSTACK_OUTPUT" >> $logfile当我手动运行脚本时,我会得到日志文件中的jstack输出,但是当我通过crontab运行脚本时,Jstack输出不会写入日志文件。
无论是手动还是通过Crontab都是在相同的用户名下运行脚本,当脚本运行时,我通过检查top命令中的用户名来验证这一点。
请让我知道我做错了什么。
发布于 2013-11-14 13:28:36
正如您提到的,脚本在手动执行时运行良好,但在crontab中失败,您似乎错过了它的目录。当您将脚本保存在crontab中时,检查是否提到了路径名。
这是错误的:30 08 10 06 * backup.sh
这是对的:30 08 10 06 * /home/ramesh/full-backup.sh
发布于 2020-12-15 13:47:55
因为,当我们从终端运行时,我们不需要传递jstack包所在的java home的完整路径。
只需使用以下命令:
#which jstack您将获得以下jstack路径:
~/jdk1.7.0_79/bin/jstack在脚本中使用以下代码:
~/jdk1.7.0_79/bin/jstack $pidhttps://stackoverflow.com/questions/19969403
复制相似问题