Eu tenho um programa que imprime alguma saída que eu gostaria que aparecesse no meu terminal uma vez a cada hora durante o dia de trabalho.
$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out
O syslog relata o seguinte:
(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)
o que estou perdendo?
Respostas:
A maneira suja pode ser redirecionar a saída do seu programa para o arquivo pts de um terminal já existente .
Para conhecer o arquivo pts, basta digitar
tty
commandseu crontab seria:
Outra maneira poderia ser o lançamento do programa como argumento do terminal:
onde
display
é a tela X onde você deseja mostrar o terminal,-H
é dizer ao terminal para permanecer aberto após o término do comando. Isso criará toda vez que um novo terminal.crontab:
se a tela não estiver presente, você terá um erro registrado pelo syslog.
fonte
Cron envia por e-mail a saída do seu script. Infelizmente, o Ubuntu não configura o correio local por padrão , e é por isso que o Cron diz nos logs "Nenhum MTA instalado, descartando a saída".
Configurar correio local pode ser uma maneira de resolver seu problema. Em vez de uma saída em um terminal, você receberá uma notificação por email.
Se você deseja que seu trabalho cron seja enviado para um terminal, será necessário redirecionar sua saída para o terminal. A parte de redirecionamento é fácil -
mas o problema é descobrir para qual terminal redirecionar. Não existe uma resposta universal para isso, depende de como você deseja selecionar o terminal entre aqueles em que está conectado.
Para usos típicos, uma notificação da GUI seria mais apropriada. Você pode usar
notify-send
. Você precisará definir aDISPLAY
variável de ambiente .fonte
Cron envia a saída para uma mala direta. Se você deseja ver a saída em um terminal, pode efetuar logon em um arquivo e usar tail -f para visualizar a saída no terminal em que deseja ver a saída
Faça logon em um arquivo
0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt
Formas alternativas de log:
echo output > log.txt
, ou você pode usar um script de wrapper descrito abaixo.Exemplo de programa e script de wrapper:
Exemplo de execução 1:
Exemplo de execução 2:
Ver saída no terminal:
Agora que o seu login ambos fora padrão e erro padrão para um arquivo, em qualquer terminal, você pode executar
tail -f
em um ou ambos os arquivos comotail -f log.txt
outail -f log.txt error.txt
para que a cauda vai assistir ou melhor seguir o arquivo (s) de alteração. página de manual da caudaArquivos de log anexados posteriormente:
Se log.txt ou error.txt forem anexados posteriormente a partir do seu programa ou de outro terminal como
$ echo "more output" >> log.txt
, a saída será vista no terminal em execução$ tail -f log.txt error.txt
Além disso,
$ echo code red >> error.txt
resulta em:fonte