Usando o cron para iniciar um processo em um terminal sem usar a tela?

1

Eu quero iniciar um processo em um terminal usando o cron. Eu quero o processo para iniciar em um terminal, para que eu possa ver continuamente a saída do processo no terminal, e matá-lo / reiniciá-lo etc. Eu sei que posso fazer isso via tela, usando "screen -p -X coisas ", mas ultimamente eu tenho executado em problemas estranhos com o congelamento de tela ( Sessão de tela congela, a saída pára, mas o processo continua em execução. Recuperando tela possível? ), e queria saber se havia uma maneira de iniciar um processo através do cron em um terminal sem usar a tela? Eu posso criar o terminal de antemão e renomeá-lo à mão, caso isso ajude.

    
por user10 02.07.2015 / 19:50

1 resposta

1

Aqui está uma solução que irá unlockpt() um novo descritor pty e escreverá seu ptsname() para stdout para você.

<<\C cc -xc - -o pts
#include <stdio.h>
int main(int argc, char *argv[]) {
        if(unlockpt(0)) return 2;
        char *ptsname(int fd);
        printf("%s\n",ptsname(0));
        return argc - 1;
}
C

Que apenas compila um pequeno programa em C que tenta chamar unlockpt() em seu arquivo stdin e, se for bem sucedido, imprime o nome do recém-criado e desbloqueado pty em stdout ou então silenciosamente retorna 2.

Em um sistema linux - dadas permissões apropriadas (em geral, elas são mais facilmente obtidas adicionando-se ao grupo tty ) - um novo descritor pty pode ser obtido tão facilmente quanto. .

exec 3<>/dev/ptmx

... para obter o fd master-side no shell atual, desde que você tenha compilado o programa acima em ./ ...

slave=$(./pts <&3)

... farão seu novo descritor praticamente utilizável e colocarão o nome do dispositivo no valor da variável $slave .

Em seguida, desde que o pacote util_linux tenha sido instalado em seu sistema, você poderá instalar um novo processo setsid() como:

setsid -c sh 3>&- <>"$slave" >&0 2>&1

O qual irá lançar um processo sh interativo como o líder de sessão do seu pty e sair, essencialmente baseando-se no shell interativo. O shell em segundo plano interpretará qualquer coisa escrita em >&3 como entrada do usuário. Uma coisa particularmente útil para escrever pode parecer:

echo "exec >$(tty) 2>&1" |
cat   - /dev/tty    >&3

Para redirecionar temporariamente todas as saídas do seu shell de segundo plano e seus filhos para o seu terminal atual, redirecionando simultaneamente toda a sua entrada de teclado de volta para o seu shell de segundo plano enquanto o cat sobreviver. No entanto, o /dev/tty do shell em segundo plano é o pty em slave e, portanto, o staus-quo é restaurado com a mesma facilidade:

echo 'exec >/dev/tty 2>&1' >&3

O mesmo tipo de coisa pode funcionar a partir de cron , mas você gostaria apenas de escrever o script i / o, é claro, ou configurar um relé de pipe para fazer o malabarismo para você automaticamente.

Veja Como eu obtenho este artigo e o que posso fazer com ele? para mais informações.

    
por 14.07.2015 / 03:46