Запланировать автоматическое выполнение задания сценария, но требует взаимодействия / ввода пользователя

Сначала я запустил этот сценарий для чего-то другого, думая, что было бы неплохо, если бы сценарий автоматически обрабатывал весь процесс, перезагружался и запускал другие сценарии. Затем я понял, что у меня проблема, поскольку другой процесс, который мне нужно запустить, действительно требует ввода данных пользователем. Хотя с тех пор я решил эту вторичную проблему, поэтому она больше не требует ввода данных пользователем, я все же хотел бы знать, как это сделать. Я новичок в 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

И да, я понимаю, что это происходит каждую минуту, но это просто для тестирования, чтобы убедиться, что это работает. Сценарии I ' m, используя все символы "#! / bin / bash" вверху, и получают права на выполнение. Он работает при запуске вручную и при вызове в crontab, хотя окно никогда не появляется и вместо этого работает в фоновом режиме. Я хотел бы иметь возможность вывести его на передний план, чтобы его можно было читать или взаимодействовать с ним соответствующим образом.

И да, я пробовал гуглить множество вещей, используя их, но я не уверен, что используя правильные термины, чтобы добиться с ним чего угодно. Я надеюсь, что кто-то может указать мне хотя бы в правильном направлении, и это было бы вишенкой на торте, если бы мне действительно показали, как это сделать с этим образцом. Надеюсь, этой информации достаточно, мне просто нужен общий пример того, как это работает.

Кроме того, я не могу найти интерактивный тег, чтобы задать этот вопрос, поэтому, если кто-то может это сделать, он быть великим. : )

Edit 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 , который запускает эти команды, выполняя первую часть, а затем автоматически запускает вторую часть после перезапуска. Затем он показывает сценарий, чтобы было очевидно, что работа выполняется. Ничего особенного, просто зная, что что-то происходит. Я также предполагаю, возможно, ошибочно, что некоторые команды в какой-то момент не смогут быть выполнены без взаимодействия с пользователем, отсюда и вопрос о том, чтобы просто установить время сценария для самостоятельного появления с терминалом.

Edit 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
1
задан 22 October 2017 в 03:21
1 ответ

Вы можете объединить несколько команд bash, сгруппировав их с помощью {}

Если вы хотите добавить новую задачу в crontab, тогда вам нужно объединить текущую конфигурацию crontab и новую конфигурацию задачи. После этого отправьте этот вывод как новую конфигурацию в crontab:

{crontab -l 2>/dev/null; echo "* * * * * /home/pi/Public/test2"} | crontab -
0
ответ дан 4 December 2019 в 04:31

Теги

Похожие вопросы