ProcessBuilder (Java) - 创建 cronjob

问题描述 投票:0回答:1

我试图通过Java代码,使用ProcessBuilder创建一个cronjob,但命令执行时返回退出代码-1.我使用的命令是下面这个。

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

一般来说,我使用的代码可以成功地执行其他命令。

有人知道这个问题吗?谢谢大家

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

java cron processbuilder
1个回答
0
投票

看起来问题在于你的命令只有在shell中运行时才有效,比如binksh、binbash或binsh。Java不解释管道或子命令()信息。

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

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

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

为了便于维护,你最好把你的sudo命令打包成自己的script.sh(第一行 !binsh或其他什么),并且只从Java中调用那个脚本,然后你就可以改变命令而不用重新编译你的Java启动器。

© www.soinside.com 2019 - 2024. All rights reserved.