Назад | Перейти на главную страницу

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

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