Сначала я запустил этот сценарий для чего-то другого, думая, что было бы неплохо, если бы сценарий автоматически обрабатывал весь процесс, перезагружался и запускал другие сценарии. Затем я понял, что у меня проблема, поскольку другой процесс, который мне нужно запустить, действительно требует ввода данных пользователем. Хотя с тех пор я решил эту вторичную проблему, поэтому она больше не требует ввода данных пользователем, я все же хотел бы знать, как это сделать. Я новичок в Linux, довольно интенсивно работал с ним, создавая сценарии для процесса в течение последних полутора месяцев. Однако я еще многого не знаю.
Итак, с учетом всего сказанного, я хочу автоматически запускать скрипт каким-либо методом. Я использовал crontab и bash-скрипт, но это не обязательно должно быть crontab. Я обычно использую это, чтобы поместить сценарий в crontab из другого сценария, а затем написать основной сценарий для вывода сценария, подобного тому, который находится под вставляемым заданием crontab.
(crontab -l 2>>/dev/null; echo "* * * * * /home/pi/Public/test2") | crontab
Меня не заботит, как это делается, чтобы скрипт появился в терминале, с которым можно было бы взаимодействовать, если у меня есть возможность запланировать, когда это произойдет. Как при перезагрузке.
#!/bin/bash
echo 'This is a test.'
echo 'This is a written test.' >> /home/pi/Public/testwrite.txt
sleep 10
И да, я понимаю, что это происходит каждую минуту, но это просто для тестирования, чтобы убедиться, что он работает. Все скрипты, которые я использую, используют "#! / Bin / bash" вверху и имеют права на выполнение. Он работает при запуске вручную и при вызове в crontab, хотя окно никогда не появляется и вместо этого работает в фоновом режиме. Я хотел бы иметь возможность вывести его на передний план для чтения или взаимодействия с ним соответственно.
И да, я пробовал гуглить множество вещей, используя их, но я не уверен, что использую правильные термины, чтобы что-то с этим сделать. Я надеюсь, что кто-то может указать мне хотя бы в правильном направлении, и это было бы вишенкой на торте, если бы мне действительно показали, как это сделать с этим образцом. Надеюсь, этой информации достаточно, мне просто нужен общий пример того, как это работает.
Кроме того, я не могу найти интерактивный тег, чтобы задать этот вопрос, поэтому, если кто-то сможет это сделать, было бы здорово. :)
Изменить 01: Чтобы быть предельно ясным, я спрашиваю, как сделать так, чтобы терминал появился на рабочем столе с помощью запланированного сценария в crontab, который запускает сценарий, вызываемый в crontab.
Изменить 02: Я опубликую эту информацию, так как ее просят, но мне нравится делать что-то ради задачи, и я не ищу супер-конкретного ответа. Было бы неплохо знать общее, как это сделать, а не что-то конкретное только для этого. Однако сначала меня это заинтересовало, потому что я поставил эту строку
sudo openssl req -x509 -newkey rsa:2048 -nodes -keyout /home/drawpileuser/key.pem -out /home/drawpileuser/cert.pem -days 365
в сценарий для создания самозаверяющего сертификата для совместной программы рисования. Я хотел сделать его доступным для неопытных людей для установки Drawpile, поэтому я сделал этот сверхмассивный скрипт. Хотя с тех пор я смог исправить эту проблему, встраивая необходимую информацию в сгенерированный скрипт с помощью
sudo openssl req -x509 -newkey rsa:2048 -nodes -keyout /home/drawpileuser/key.pem -out /home/drawpileuser/cert.pem -days 365 -subj "/C=$country/ST=$state/L=$locality/O=$organization/OU=$unitname/CN=$hostname/emailAddress=$email"
Поскольку я это сделал, сейчас я пытаюсь сделать простой в использовании сценарий, который Как установить EmulationStation для Raspberry Pi на Raspbian, который запускает эти команды, выполняя первую часть, а затем автоматически запускает вторую часть после перезапуска. Затем он показывает сценарий, чтобы было очевидно, что работа ведется. Ничего особенного, просто зная, что что-то происходит. Я также предполагаю, возможно, ошибочно, что некоторые команды в какой-то момент не смогут быть выполнены без взаимодействия с пользователем, поэтому возникает вопрос о том, чтобы просто синхронизировать скрипт с терминалом.
Редактировать 03 и ответ: Пользователь gf_ смог указать мне в правильном направлении. Используя команду lxterminal -e command
( Источник ), Я могу заставить терминал открывать новое окно. Но это еще не все, что нужно сделать ( Источник 2 ). Укажите путь, а не полагайтесь на переменные среды в crontab ... и я уже использовал PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
так что я просто согласился с этим. Затем создайте простой сценарий для использования в crontab, который вызывает другой сценарий.
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
lxterminal -e /home/pi/Public/./test
Crontab (команда crontab -e) в итоге выглядит как ...
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
* * * * * /home/pi/Public/test2
Что вызывает финальный тест скрипта.
#!/bin/bash
echo 'This is a test.'
echo 'This is a written test with lxterminal -e for real.' >> /home/pi/Public/testwrite.txt
sleep 10
Вы можете объединить несколько команд bash, сгруппировав их с помощью{ }
Если вы хотите добавить новую задачу в crontab, вам необходимо объединить текущую конфигурацию crontab и новую конфигурацию задачи. После этого отправьте этот вывод как новую конфигурацию в crontab:
{crontab -l 2>/dev/null; echo "* * * * * /home/pi/Public/test2"} | crontab -