Programar um trabalho de script para ser executado automaticamente, mas requer interação / entrada do usuário

1

Inicialmente, iniciei este script para outra coisa, achando que seria bom para o script manipular o processo completo automaticamente, reiniciar e iniciar mais coisas do script. Então percebi que tinha um problema, já que outro processo que preciso executar realmente requer a entrada do usuário. Embora eu tenha resolvido esse problema secundário para não exigir mais a entrada do usuário, ainda gostaria de saber como fazer isso. Sou relativamente novo no Linux, tenho trabalhado bastante com o script de um processo no último mês e meio. No entanto, ainda há muitas coisas que não sei.

Então, com tudo isso dito, quero executar um script automaticamente por meio de algum método. Eu tenho usado crontab e um script bash, mas não necessariamente precisa ser crontab. Eu costumo usar isso para colocar o script no crontab a partir de outro script e, em seguida, escrever o script principal para gerar um script como o que está abaixo do trabalho do crontab que está sendo inserido.

(crontab -l 2>>/dev/null; echo "* * * * * /home/pi/Public/test2") | crontab

Eu poderia me importar menos sobre como isso é feito para fazer com que o script apareça em um terminal para interagir, contanto que eu tenha a capacidade de programar quando isso acontecer. Como em um reinício.

#!/bin/bash
echo 'This is a test.'
echo 'This is a written test.' >> /home/pi/Public/testwrite.txt
sleep 10

E sim, eu percebo que isso acontece a cada minuto, mas é apenas para fins de teste para se certificar de que está funcionando. Os scripts que estou usando todos usam "#! / Bin / bash" no topo e recebem direitos de execução. Ele funciona quando iniciado manualmente e quando chamado no crontab, embora a janela nunca apareça e, ao invés disso, funcione em segundo plano. Eu gostaria de uma maneira de forçá-lo ao primeiro plano a ser lido ou interagir de acordo.

E sim, tentei usar o Google em várias coisas, usando-as, mas não tenho certeza se estou usando os termos certos para chegar a algum lugar com isso. Eu estou esperando que alguém possa me apontar na direção certa, pelo menos, e seria a cereja no topo do bolo, se eu fosse realmente mostrado como fazer isso com esta amostra. Espero que isso seja informação suficiente, estou apenas precisando de um exemplo geral de como fazer isso funcionar.

Além disso, não consigo encontrar uma tag interativa para colocar essa pergunta, então, se alguém puder fazer isso, será ótimo. :)

Editar 01: Para ser super claro, estou perguntando como fazer um terminal aparecer na área de trabalho através de um script agendado no crontab que executa o script chamado em crontab.

Editar 02: Vou postar esta informação desde que ela está sendo solicitada, mas eu gosto de fazer as coisas em nome do desafio e não estou procurando por uma resposta super específica. Um geral como seria bom saber, na verdade, em vez de algo específico apenas para isso. No entanto, eu inicialmente fiquei preocupado com isso se eu tivesse colocado essa linha

sudo openssl req -x509 -newkey rsa:2048 -nodes -keyout /home/drawpileuser/key.pem -out /home/drawpileuser/cert.pem -days 365

em um script para criar um certificado autoassinado para um programa de desenho colaborativo. Eu queria torná-lo acessível para pessoas não-tech para instalar o Drawpile, então eu fiz este script super-massivo. Embora eu tenha sido capaz de corrigir esse problema incorporando as informações necessárias no script gerado com

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"

Desde que eu fiz isso, o que eu estou tentando fazer agora é tornar o script fácil de usar em Como para instalar o EmulationStation para o Raspberry Pi no Raspbian , que executa esses comandos executando a primeira parte e executando a segunda parte após a reinicialização automaticamente. Em seguida, ele mostra o script para que fique claro que o trabalho está sendo feito. Nada extravagante aqui, apenas sabendo que algo está acontecendo. Eu também estou assumindo, talvez incorretamente, que alguns comandos em algum ponto não poderão ser feitos sem a interação do usuário, daí a questão de apenas cronometrar um script para aparecer sozinho com o terminal.

Editar 03 & Resposta: Usuário gf_ foi capaz de me apontar na direção certa. Usando o comando lxterminal -e command ( Fonte ), posso fazer o terminal abra uma nova janela. Mas isso não é tudo o que precisa ser feito ( Source 2 ). Especifique o caminho em vez de confiar em variáveis de ambiente no crontab ... e eu já estava usando PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin , então eu fui com isso. Em seguida, crie um script simples para usar no crontab, que chama outro script.

#!/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 (comando crontab -e) acaba parecendo ...

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
* * * * * /home/pi/Public/test2

Que chama o teste final do script.

#!/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
    
por Wade S 21.10.2017 / 05:34

1 resposta

0

Você pode combinar vários comandos bash agrupando-os com { }

Se você quiser adicionar uma nova tarefa ao crontab, então você precisa combinar a configuração atual do crontab e a nova configuração da tarefa. Depois disso envie esta saída como nova config para crontab:

{crontab -l 2>/dev/null; echo "* * * * * /home/pi/Public/test2"} | crontab -
    
por 21.10.2017 / 13:25