./jmap 命令在手动运行脚本时有效,但在作为 cronjob 运行时失败

./jmap 命令在手动运行脚本时有效,但在作为 cronjob 运行时失败

我有一个相当简单的脚本,用于计算堆大小,它使用./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应该可以做你想做的事。

相关内容