繁体   English   中英

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

[英]How to programmatically send List of commands (with parenthesis) from Java to linux terminal? Crontab schedulation related

我无法将命令列表从 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 中的命令时,它可以正常工作。 有没有办法让控制台通过像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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM