我尝试使用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"
通常,我使用的代码会成功执行其他命令。
有人对这个问题有想法吗?谢谢
(我发现一个相对的问题,没有答案)
答案 0 :(得分:0)
这里的问题似乎是您的命令仅在从/ bin / ksh,/ bin / bash或/ bin / sh之类的shell中运行时才有效。 Java不解释管道或子命令()信息。
您的Java命令应该确保首先运行所选的SHELL,并将实际命令作为参数传递给该外壳。我不确定您使用什么-一段时间未使用Linux-但BASH命令类似于:
/bin/bash -c "sudo (blah | blah)"
在Windows上,您会看到类似的问题-Java可以运行“ cmd.exe / c dir”,但不能自行启动“ dir”。
为了便于维护,最好将sudo命令打包到其自己的script.sh中(第一行!/ bin / sh或其他内容),并且仅从Java调用该脚本,然后您可以更改该命令而无需重新编译您的Java启动器。