gpt4 book ai didi

java - 如何以编程方式将命令列表(带括号)从 Java 发送到 Linux 终端? crontab调度相关

转载 作者:行者123 更新时间:2023-12-02 08:42:22 25 4
gpt4 key购买 nike

我在将命令列表从 Java 发送到 CMD 时遇到问题。我的目标是以编程方式从 Java 更新 Crontab 调度脚本。

我觉得这个问题的发生是因为“;”发送的字符串中“-l”后面的符号充当 CMD 中的命令分隔符。我尝试直接使用字符串,并使用进程构建器(使用不同的组合,甚至通过为每个空格分割命令):

String cmd = "(crontab -l; echo '9 * * * * sudo python /home/pi/Desktop/led.py') | sort - | crontab -";
Process p = Runtime.getRuntime().exec(cmd);

String commandArray[] = {"(crontab", "-l,", "\"echo '9 * * * * sudo python /home/pi/Desktop/led.py\")", "|", "sort", "-", "|", "crontab", "-"}
Process p = new ProcessBuilder (commandArray).redirectErrorStream(true).start();

在这两种情况下我都得到以下信息:

java.io.IOException: Cannot run program "(crontab": error=2, No such file or directory

但是,当直接在终端中运行 String cmd 中存储的命令时,它工作正常。有没有办法让控制台将输入的运行时字符串视为通过子 shell 的命令列表,如 HERE ?谢谢。

最佳答案

好的,命令读取错误的问题已由 Ahmet 在评论中的建议修复,尝试将其作为 bash 脚本运行。原因似乎是因为 Runtime.exec() 无法使用管道“|”。 我还设置了从文件运行 crontab 的命令,而不是对预期的 crontab 命令进行硬编码,并且它看起来像这样:

String[] cronString = {
"/bin/sh",
"-c",
"sudo cat /home/pi/Desktop/Automation/schedule_commands.txt | crontab -"
};
System.out.println(cmd3);
Process p3 = Runtime.getRuntime().exec(cronString);

为了澄清,schedule_commands.txt 包含:

0 18 * * * sudo python /home/pi/Desktop/led.py
0 * * * * java -classpath /home/pi/Desktop/Automation automation

关于java - 如何以编程方式将命令列表(带括号)从 Java 发送到 Linux 终端? crontab调度相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61304071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com