我有一个相当简单的脚本,用于计算堆大小,它使用./jmap
。脚本首先找到进程 ID 并将其保存在变量中。脚本中将PID
其作为变量给出,如下所示:PID
$JAVA_BIN./jmap -heap $(cat $PID) > test.txt
手动运行脚本时,它运行良好。如果我PID
在上面的命令中直接给出数字而不是变量,那么脚本也能cronjob
成功运行。
但是如果我像上面那样给出它,则cronjob
输出的 man 值jmap
作为 test.txt 的输出:
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
就像无法PID
从变量中读取值一样,我正在运行crontab -e
对于如何解决这个问题,有任何的建议吗?
答案1
命令序列$(cat $PID)
无效。给定的序列cat
将把变量的内容解释$PID
为文件路径。由于很可能没有这样的文件,因此此命令将失败(或打印该文件的内容)。
我猜你正在寻找什么$(echo $PID)
,它会将变量 $PID 的内容打印到标准输出。
我不太懂 Java 但我认为$JAVA_BIN./jmap -heap $PID > test.txt
应该可以做你想做的事。