O que acontece com o cron-job que requer o prompt do usuário?

2

Digamos que estou executando um programa em C via crontab -e :

15 11 * * * time /home/philip/school/a1_c_program.c > /home/philip/logs/time2execute.txt

Mas o programa C requer que o usuário insira algum texto.

O que acontece nessa situação? O script C continua sendo um processo aberto na minha máquina até que eu reinicie? Ou fecha automaticamente depois de algum tempo?

Se eu pudesse anexar ao processo e digitar o texto desejado, o comando de tempo terminaria de executar e imprimiria algo no arquivo de texto recém-criado?

Eu observei com meu cronjob acima que o arquivo time2execute.txt foi criado, mas está vazio.

Edit: Uma vez eu fixei meu crontab para apontar para o programa c compilado ao invés do arquivo fonte. O arquivo de texto incluía o texto do prompt que o usuário visualizava.

    
por Philip Kirkbride 18.02.2017 / 17:21

1 resposta

10

As ferramentas em execução pelo daemon cron obtêm um ambiente do cron e não do seu shell. O cron não fornece uma entrada padrão para essas ferramentas, mais exatamente ele fornece uma falsificação do dispositivo /dev/null .

Assim, se a ferramenta exigir entrada padrão, ela receberá um erro de fim de arquivo quando tentar ler os dados de entrada. Depende da ferramenta, o que vai fazer com isso. Na maioria dos casos, será o mesmo que você executaria chamando o programa com

programname </dev/null

Se ele tentar ler o terminal diretamente, como ncurses apps, a sequência de inicialização do terminal não funcionará. A chamada ncurses_init() dará um resultado de erro. Depende da ferramenta também neste caso, o que faz com o resultado do erro. A maioria das ferramentas simplesmente sai com uma mensagem de erro. Depende da configuração cron , o que fará com essa mensagem de erro (por padrão, ela registra e envia você por e-mail).

Nota: Sua linha cron está ruim, você tenta executar um código-fonte .c diretamente. Primeiro você tem que compilá-lo para um executável binário. Além disso, a ferramenta time coloca sua saída na saída de erro padrão, seria bom para você redirecionar sua saída (e também seu erro std) para algum arquivo de log.

    
por 18.02.2017 / 17:43

Tags