java - 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"
通常,我使用的代码可以成功执行其他命令。
有人对这个问题有任何想法吗?谢谢
(我发现了一个没有答案的相对问题)
解决方案
看起来这里的问题是您的命令仅在从 /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 启动器.
推荐阅读
- regex - 包含在 Apache 免费标记中
- neo4j - 模拟 Neo4j 结果的临时视图
- html - 在 html/css 中选择列表项的问题
- python - 文件未在开发中显示
- python - 将 CSV 文件数据与文本文件数据匹配
- sql - SQL 中的两个表内连接产生的 SQL 表的最大大小是多少?
- html - 尝试使用 CSS 将 div 向右对齐
- python - pandas concat 但从左侧 df 获取重复的键行
- javascript - 在 JS 脚本中显示数据库信息
- heroku - 为什么即使 url 是正确的前端和后端,Heroku 也会返回 Cannot GET?