Как программно отправить Список команд (с круглыми скобками) с терминала Java на linux? Crontab, связанный с расписанием - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблемы с отправкой списка команд из Java в CMD. Моя цель - программно обновить скрипт планирования Crontab с Java.

. Я чувствую, что проблема возникает из-за ";" Символ после "-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 непосредственно в терминале, она работает нормально. Есть ли способ заставить консоль обрабатывать входную строку времени выполнения как список команд через подоболочку, например ЗДЕСЬ ? Спасибо.

1 Ответ

1 голос
/ 19 апреля 2020

Хорошо, проблема с неверно читаемыми командами была исправлена ​​советом Ахмета в комментарии, чтобы попытаться запустить его как bash скрипт. Кажется, причина этого в том, что Runtime.exe c () не может работать с каналами "|". Я дополнительно установил команду для запуска 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...