首页 > 解决方案 > ProcessBuilder (Java) - 创建 cronjob

问题描述

我尝试使用 ProcessBuilder 通过 Java 代码创建一个 cronjob,但命令执行返回退出代码 -1。我使用的命令如下:

"sudo su root -c (crontab -l 2>/dev/null; echo \"*/15 * * * * /test/scripts/a_script.sh\") | crontab - && echo OK || echo FAILED"

通常,我使用的代码可以成功执行其他命令。

有人对这个问题有任何想法吗?谢谢

(我发现了一个没有答案的相对问题)

标签: javacronprocessbuilder

解决方案


看起来这里的问题是您的命令仅在从 /bin/ksh、/bin/bash 或 /bin/sh 等 shell 中运行时才有效。Java 不解释管道或子命令 () 信息。

您的 Java 命令应确保首先运行您选择的 SHELL,将实际命令作为参数传递给该 shell。我不确定您使用的是什么 - 并且有一段时间没有使用 Linux - 但 BASH 命令将类似于:

/bin/bash -c "sudo (blah | blah)"

在 Windows 上,您会看到类似的问题 - Java 可以运行“cmd.exe /c dir”但不会自行启动“dir”。

为了便于维护,您最好将 sudo 命令打包到它自己的 script.sh 中(第一行 !/bin/sh 或其他),并且只从 Java 调用该脚本,然后您可以更改命令而无需重新编译 Java 启动器.


推荐阅读