Por que meu cron job cria um log com um ponto de interrogação final?

5

Eu tenho o seguinte trabalho cron:

 */5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txt

Cria o seguinte arquivo:

david@ubuntu:/var/www/log$ ls -l
-rw-r--r-- 1 root root   540 2011-05-30 17:10 log.txt?

Por que isso está criando um ponto de interrogação à direita? Como posso parar isso?

(Eu estou logando no console e vendo os resultados sem editor então eu sei que "?" está lá.)

E este é o único arquivo que tem um '? então eu sei que não é um problema de editor. Eu nem estou usando nenhum editor, estou apenas vendo a tela CRT do console.

    
por davidjhp 30.05.2011 / 23:15

3 respostas

4

A execução deste comando fornecerá mais informações:

$ crontab -l | cat -tve

Tenho certeza de que você verá caracteres extras no final da saída, algo assim:

*/5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txtM-U$

o cifrão sinaliza o fim da linha (opção -e para o gato). Qualquer coisa entre .txt e $ é lixo extra, provavelmente devido a razões listadas em outras respostas.

A maneira mais fácil de corrigir isso é definir seu $EDITOR para um editor simples e reeditar o crontab. Por exemplo:

$ EDITOR=/usr/bin/pico crontab -e

remova os caracteres estranhos no final da linha.

    
por 31.05.2011 / 00:02
0

Seu editor está usando o CRLF como EOL, em vez de apenas LF, e esse caractere está sendo considerado parte do nome do arquivo. Certifique-se de que seu editor use os finais de linha corretos.

    
por 30.05.2011 / 23:26
0

A página de manual de ls mostra que, se o comando é executado dentro de um terminal, os caracteres de controle serão exibidos como um '?' caractere em vez do caractere de controle real. Neste caso, o caractere de controle presumivelmente será uma alimentação de linha errante deixada pelo seu editor em vez do caractere \n do UNIX padrão.

Você precisa configurar seu editor de texto para usar fins de linha (LF) do UNIX e não usar o CRLF, ou usar o editor de linha de comando 'visudo' para alterar seus cronjobs, o que tratará disso automaticamente.

    
por 30.05.2011 / 23:30

Tags