Crontab - direcionar erro para arquivo [RESOLVIDO]

1. Crontab - direcionar erro para arquivo [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 16/01/2013 - 15:44h

Boa tarde, estou com a seguinte dificuldade

tenho um agendamento no crontab, "inserido através do crontab -e" que não roda se a saída for direcionada da forma abaixo,

10 00,08,12 * * * /bats/firewall.sh >> /bats/logs/firewall-`date +%m%d`

mas se alterar para

10 00,08,12 * * * /bats/firewall.sh >> /bats/logs/firewall.log

funciona.

a questão é que preciso separar a saída por dia.
já tentei -$(date +%m%d) e também não funcionou.

estou usando o centOS 6.3

no slackware 12.2 a 1ª linha funcionava

grato
tutorial sobre o crond para os interessados: https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-a...

para instalar yum -y install cronie


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/01/2013 - 16:49h

Amigo,

O que vai resolver no teu caso é isso...

Precisa escapar o caractere %...

`date +\%Y-\%m-\%d`

Mas, so para confirmar que aqui no debian, aquela solução funciona normalmente

Não esqueça de marcar como resolvido



3. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/01/2013 - 18:47h

Tenta como $(date +%m%d) que é a outra forma de invocar um bash.
Talvez uma variável de ambiente definida para esse script possa funcionar também...





4. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 17/01/2013 - 08:35h

kyetoy escreveu:

Tenta como $(date +%m%d) que é a outra forma de invocar um bash.
Talvez uma variável de ambiente definida para esse script possa funcionar também...




bom dia,

já tentei esta alternativa e não resolveu, também jã tentei o uso de aspas e não sanou o problema.

ex: 10 00,08,12 * * * /bats/firewall.sh >> /bats/logs/"firewall-"`date +%m%d`

ou assim

10 00,08,12 * * * /bats/firewall.sh >> "/bats/logs/firewall-"`date +%m%d`


5. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/01/2013 - 09:02h

Amigo,

Olha como eu fiz um script para cron.daily.
Neste caso o script não pode ter extensao de arquivo.


=============================================================
# script para ntpdate
==============================================================
#!/bin/bash

dia=$(date +%Y%m%d)

touch /var/log/ntpdate-$dia

/usr/sbin/ntpdate a.ntp.br b.ntp.br > /var/log/ntpdate-$dia

===============================================================


Não avaliei a frequencia de salvamento do teu script...

Como o meu é uma vez por dia eu uso >

Se voce utilizar >> irá escrever varias vezes no mesmo log.

Use +%Y%m%d pois se passar de um ano para outro pode dar problema no futuro.


6. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 17/01/2013 - 09:53h

agradeço seu empenho,

serei mais especifico

preciso que o script rode três vezes por dia exatamente na hora marcada,
não sei fazer isto através das pastas cron (cron.daily/ cron.hourly cron.monthly/ cron.weekly/), mas caso seja possível não vejo problema algum em fazer deste modo.

dentro do script tenho sim o direcionamento acontecendo conforme você mostrou acima, mas em caso de mensagem de erro que seria exibida no monitor ela se perde ou trava o agendamento por isso é necessário direciona-la para um log.

já a dica de usar também o "%Y" é muito valida só não coloquei pelo fato de que não juntarei esses logs por mais de um ano, tenho um outro script que faz a limpeza periódica de varias coisas dentro do SO, no caso do log aqueles com mais de 90 dias são apagados



7. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/01/2013 - 10:51h

tentei uma outra solução aqui...

edite o /$USER/.profile do usuário que executará o script e crie uma variável de ambiente com a data do dia...

export DIA=$(date +%Y%m%d)


Depois ajustei o cron para executar a tarefa a cada minuto para teste.

Inseri o ambiente do usuário (talvez não precise disso...)

Se você está interessado SOMENTE na saída de erro então coloque o

2>> arquivo_erro-$DIA

Vi que dá para jogar a saida 1>> para um lugar e 2>> para outro.. mas não testei isso.


* * * * * . $HOME/.profile; /root/teste.sh 2>> /var/log/teste-$DIA

Funcionou aqui!



8. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 17/01/2013 - 11:09h

vlw ótima dica,

a questão é que a variável só vai ser criada quando o usuário logar, caso contrario o .profile não será acionado.

sendo assim tenho de criar a variável a partir de um outro método.

vou pensar sobre isso.


9. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/01/2013 - 12:46h

Aqui funcionou mesmo quanto o usuario (aqui fiz de root) não estava logado....

* * * * * . $HOME/.profile; /root/script.sh >> /var/log/script-$HOJE

Observe que apos o último asterisco tem um . (ponto) depois tem um espaço em branco e depois $HOME/.profile;

Pode ser isso que tá errado aí...

Agora, como provocar uma saída de erro num script que não tenho a menor ideia????

Digita isso no shell do usuário que irá executar o script o resultado deve ser on...

#shopt login_shell
login_shell on

PS: Eu uso Debian 6 para testar isso.





10. Re: Crontab - direcionar erro para arquivo [RESOLVIDO]

Guilherme Moura de Souza
sir.guil

(usa CentOS)

Enviado em 17/01/2013 - 14:53h

agora é que que captei vossa mensagem você colocou para exportar pelo .profile do root a variável.
só que você também esta chamando o profile antes da execução.
engenhoso

vou testar