Fazendo utilitários “at” ou “sleep” para imprimir stdout em timeout, na maior das sessões de Bash [closed]

1

Eu quero executar um conjunto de comandos com 2 horas de antecedência do tempo atual (ou seja, em um tempo limite).

  1. Eu preciso continuar usando o Bash regularmente enquanto esses comandos são expirados (isto é, os comandos precisam ser executados em segundo plano, como acontece com & ).

  2. Finalmente, eu preciso do comando stdout impresso no terminal da sessão que é mais alto em toda a hierarquia de sessão.

Por que eu quero fazer isso:

Eu preciso disso como parte de um script que instala o PHPmyadmin (PMA) e, em seguida, exclui-o após 2 horas, por motivos de segurança. Esta solução foi recomendada a mim por várias pessoas do campo Segurança da informação (se vier junto com a filtragem da porta 3306, e algumas adicionariam HTTPS também).

O que pareceu ser uma solução no início:

Eu posso tempo limite de comandos com sleep ou at utilitários, veja:

cat << EOF
sudo nohup sleep 2h
echo "hello"
echo "welcome"
EOF

Ou:

cat << EOF | sudo at 'now + 2 hours'
echo "hello"
echo "welcome"
EOF

O problema com esses métodos (como estão):

O problema é que os comandos não são executados em segundo plano e sua stdout não será impressa no terminal da sessão mais alta na hierarquia.

Notas:

  • Eu digo "sessão mais alta" ou "sessão mais alta na hierarquia" ou "1ª sessão" apenas para enfatizar que a sessão original dos comandos pode ser perdida devido a fechamento intencional ou intencional da janela da sessão (ou outras razões semelhantes como uma reinicialização repentina ou uma queda de energia de 2 minutos) e nesse caso provavelmente iniciarei outra sessão, que será a 1ª na hierarquia de sessão, antes do tempo limite de 2 horas dos comandos.
por JohnDoea 28.12.2016 / 07:39

1 resposta

0

O Linux manipula tudo na forma de arquivos dos dispositivos para tty s.

Então, o que eu sugiro é enviar a saída para um arquivo e um tty como este:

cat << EOF | sudo at 'now + 2 hours' | tee /var/tmp/at_output.log
echo "hello"
echo "welcome"
less /var/tmp/at_output.log
EOF

Agora, tudo o que você precisa fazer é visualizar o arquivo de saída em uma sessão de tela ou por meio de um visualizador de texto, como gato ou rabo.

Por exemplo, basta executar tail -f /var/log/at_output.log do seu atual tty e ele mostrará um feed ao vivo da saída, começando pelas últimas 10 linhas.

Você também pode visualizá-lo dentro de um screen quando mudar para um, que primeiro precisará criar:

Para criar um tipo de sessão screen : screen -S at_proc

Você será presenteado com uma sessão screen , que é um tty portável, permitindo que você se conecte e desconecte sem quebrar o comando executando e mantendo o histórico, aqui você poderá executar seu comando ininterruptamente. / p>

Para desconectar da sessão screen , tecle ctrl + a + d .

Para se reconectar a uma sessão, basta digitar screen -r at_proc ou, se for a única sessão, apenas screen -r .

Quando você terminar a sessão de tela, apenas volte a digitá-la e digite exit ou pressione ctrl + d como faria em umtty normal .

    
por 28.12.2016 / 08:23