CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

1. CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 17/06/2015 - 15:34h

Olá amigos,

Meu problema é o seguinte:
Eu sou o administrador da rede de uma instituição federal, acabei de assumir a função. Essa instituição determina que suas sedes e subsedes etc, utilizem um sistema de protocolos que eles distribuem. Esse sistema de protocolo foi desenvolvido em cima da plataforma do UBUNTU 8.10, e infelizmente eu não posso atualizar nada sem prejudicar o sistema.

Esse sistema movimenta um banco de dados relativamente grande, mas muito importante, por isso o backup deve ser realizado diariamente. Para isso eu utilizo um script, vamos nomeá-lo de backup.sh
Para que o mesmo rodasse de 2ª a 6ª às 20h eu adicionei a seguinte linha no etc/crontab
#Backup sistema de 2ª a 6ª ás 20:00
0 20* * 1-5 root /root/backup.sh


O script do backup funciona PERFEITAMENTE. Sem erros. O problema começou quando ocorreu uma nova atualização dessa distribuição do sistema. O sistema não consegue reiniciar automaticamente após o backup. Na verdade o sistema não consegue iniciar automaticamente em nenhuma situação. A "solução" encontrada foi:

Devido a um problema de bibliotecas externas, usadas no sistema, os servidores não conseguem entrar no ar. Enquanto o fabricante não disponibilizar uma correção, existe uma solução de contorno, que deve ser realizada pelo Administrador do sistema, cada vez que o sistema iniciar:

1. Abrir o terminal
2. Log como root
sudo su -
3.Troque a data e hora do sistema para 2014-01-01 00:00:00:
date -s '2014-01-01 00:00:00'
4.Inicie o serviço do tomcat
/etc/init.d/tomcat start
5.Faça a correção da data e hora (Ex: 17/06/2015 15:00:00)
date -s '2015-06-17 15:00:00'
6.Teste se o sistema funciona


Então até que o fabricante resolva o problema o estamos tentando automatizar essa correção de datas com um script, porém tentei de duas formas:

correcao.sh
#!/bin/sh
/bin/date -s '2013-01-01 00:00:00'
sleep 10
/etc/init.d/tomcat start
sleep 10
/usr/sbin/ntpdate -u pool.ntp.org


correcao2.sh
#!/bin/sh
/etc/init.d/tomcat stop
sleep 10
/bin/date -s '2013-01-01 00:00:00'
sleep 10
/etc/init.d/tomcat start
sleep 10
/usr/sbin/ntpdate -u pool.ntp.org


E no crontab da seguinte forma:
#Correção de datas
00 23 * * 1-5 /root/correcao.sh && /root/correcao2.sh


O que eu não consegui entender ainda é o seguinte: Repare que o script da correção deveria rodar 3 horas APÓS o backup.sh, mas quando eu adiciono essa linha acima no crontab ele não roda o script de backup. (E creio eu que também não roda o script de correção) Se eu comento a linha do script de correção, o script do backup roda normal, mas o sistema não inicia automaticamente. Não faço idéia do que está errado na sintaxe do crontab.

Alguém pode me dar uma luz ai?

Obrigado


  


2. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/06/2015 - 19:28h

Pelo que você escreveu, está faltando um espaço entre o 20 e o asterisco na linha do /etc/crontab referente ao backup. Já na linha dos scripts de correção, está faltando a coluna que informa o usuário com que a tarefa deve ser executada (sexta coluna; suponho que seja o root).

Já vi problemas de Java parecido com esse que está afetando seu Tomcat. Era coisa relativa a configuração de fuso-horário (timezone) do Java. Não é problema de SO.

Infelizmente, eu vi isso há muito tempo, e como (FELIZMENTE!!) não trabalho mais com Java, não lembro exatamente onde mexer. Acho que existem patches para o Java, mas acho que há também uma forma de forçar um timezone via arquivo ".properties" ou diretiva na linha de comando.


3. Crontab e Shell Script

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 18/06/2015 - 09:06h

Paulo, primeiramente obrigado pela pronta resposta.

Na linha que roda o backup do script, na qual você disse estar faltando um espaço, ele não falta no meu servidor. Provavelmente deletei esse espaço na hora de postar o code, falha minha. Tanto é que o backup roda perfeitamente, se eu não colocar pra rodar o script de correção.

Na linha do crontab, você disse que faltava o usuário no qual deveria ser executado o script. Também já havia pensado nisso, e tentei a seguinte linha, sem sucesso:

#Correção de datas
00 23 * * 1-5 root /root/correcao.sh && /root/correcao2.sh


Outra dúvida minha, que ainda não fez sentido na minha cabeça é porque o script do backup roda só se eu não adicionar o script de correção. Entenda:

Se meu CRONTAB estiver dessa forma:

#Backup sistema de 2ª a 6ª ás 20:00
0 20 * * 1-5 root /root/backup.sh
#Correção de datas
00 23 * * 1-5 /root/correcao.sh && /root/correcao2.sh

O sistema NÃO faz o backup.

OBS.: Já tentei adicionando o usuário root, sem nenhum resultado diferente:

#Backup sistema de 2ª a 6ª ás 20:00
0 20 * * 1-5 root /root/backup.sh
#Correção de datas
00 23 * * 1-5 root /root/correcao.sh && /root/correcao2.sh


Se eu comentar a linha da correção, assim:

#Backup sistema de 2ª a 6ª ás 20:00
0 20 * * 1-5 root /root/backup.sh
#Correção de datas
#00 23 * * 1-5 /root/correcao.sh && /root/correcao2.sh

O sistema FAZ o backup, mas como tem o problema das datas, ele não inicia automaticamente.

O backup leva algo em torno de 1hr, ou seja a correção deveria rodar 1 hora DEPOIS de concluido o backup. Não faz sentido meu script de correção estar atrapalhando a realização do backup. E pra mim também não faz sentido o backup não ser realizado se houver um erro de sintaxe na linha(do crontab) que roda o script de correção.

Alguma outra sugestão?

EDIT:
Quanto ao problema de TIMEZONE, obrigado pela idéia, vou sugerir ao setor que distribui o sistema.


4. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 18/06/2015 - 09:57h

Colega,
Já experimentou olhar o log do cron?
E olhar tmb o /var/spool/cron/crontabs



5. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/06/2015 - 10:58h

Como disse o colega acima, olhe os logs. Tenho receio de que desvios muito grandes no relógio, com uma volta a passado remoto e depois um salto para o futuro (a partir daquele passado -- na verdade, é ao nosso presente), confundam o cron. Espero que os logs mostrem alguma coisa.

Em todo caso, o formato das duas linhas está inconsistente. Que eu saiba, o arquivo /etc/crontab requer sempre a especificação do usuário na sexta coluna. É muito estranho que esteja lá para uma tarefa, mas não para outra (isso é diferente do crontab de cada usuário, que costuma residir em /var/spool/cron/crontabs/username, e que, por motivo óbvio, não tem a especificação de usuário que executa cada tarefa).


6. CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 02/07/2015 - 16:38h

Desculpas pela ausência esse período todo. Um companheiro entrou de férias e fiquei meio atolado, acabei esquecendo de postar o log.

Vale ressaltar que chequei o diretório sugerido pelo amigo ( /var/spool/cron/crontabs) e estava vazio. Entretanto abaixo segue o log que obtive através da ferramenta Log do sistema, do ubuntu.


Jun 18 22:00:01 servidor-sped /USR/SBIN/CRON[9618]: (root) CMD (/root/backup.sh)

Jun 18 22:00:01 servidor-sped /USR/SBIN/CRON[9625]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 22:10:03 servidor-sped /USR/SBIN/CRON[9920]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 22:17:03 servidor-sped /USR/SBIN/CRON[10070]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jun 18 22:20:03 servidor-sped /USR/SBIN/CRON[10221]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 22:30:02 servidor-sped /USR/SBIN/CRON[10385]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 22:39:06 servidor-sped dhclient: DHCPREQUEST of 10.125.4.5 on eth0 to 10.125.4.1 port 67
Jun 18 22:39:06 servidor-sped dhclient: DHCPACK of 10.125.4.5 from 10.125.4.1
Jun 18 22:39:06 servidor-sped dhclient: bound to 10.125.4.5 -- renewal in 3455 seconds.
Jun 18 22:40:01 servidor-sped /USR/SBIN/CRON[11203]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 22:50:01 servidor-sped /USR/SBIN/CRON[11293]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 23:00:01 servidor-sped /USR/SBIN/CRON[11383]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 23:10:01 servidor-sped /USR/SBIN/CRON[11473]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 23:17:01 servidor-sped /USR/SBIN/CRON[11563]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jun 18 23:20:01 servidor-sped /USR/SBIN/CRON[11654]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)

Jun 18 23:20:01 servidor-sped /USR/SBIN/CRON[11662]: (root) CMD (/root/correcao.sh && /root/correcao2.sh)

Jun 18 23:30:02 servidor-sped /USR/SBIN/CRON[11680]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 23:36:41 servidor-sped dhclient: DHCPREQUEST of 10.125.4.5 on eth0 to 10.125.4.1 port 67
Jun 18 23:36:41 servidor-sped dhclient: DHCPACK of 10.125.4.5 from 10.125.4.1
Jun 18 23:36:41 servidor-sped dhclient: bound to 10.125.4.5 -- renewal in 2786 seconds.
Jun 18 23:40:01 servidor-sped /USR/SBIN/CRON[11771]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 18 23:50:01 servidor-sped /USR/SBIN/CRON[11861]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 19 00:00:01 servidor-sped /USR/SBIN/CRON[11951]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 19 00:10:01 servidor-sped /USR/SBIN/CRON[12041]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 19 00:17:01 servidor-sped /USR/SBIN/CRON[12131]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jun 19 00:20:01 servidor-sped /USR/SBIN/CRON[12221]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jun 19 00:23:07 servidor-sped dhclient: DHCPREQUEST of 10.125.4.5 on eth0 to 10.125.4.1 port 67


Coloquei somente o trecho em que o script roda até um pouco adiante, se acharem que devo postar todo o log, me digam por favor. Ressaltei a linha dos scripts.

Pelo que eu interpretei, todos os scripts rodaram, INCLUSIVE o do backup. Entretanto, no dia seguinte verifiquei que o backup não foi realizado.

Alguma sugestão?




7. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Danillo Costa
hellnux

(usa Kurumin)

Enviado em 02/07/2015 - 17:56h


Particularmente, nunca vi essa sintaxe:
0 20 * * 1-5 root /root/backup.sh

Eu usaria da seguinte forma:
0 20 * * 1-5 /bin/sh /root/backup.sh

O caminho absoluto do interpretador e o shell script como parâmetro.


8. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 03/07/2015 - 09:40h

hellnux escreveu:


Particularmente, nunca vi essa sintaxe:
0 20 * * 1-5 root /root/backup.sh

Eu usaria da seguinte forma:
0 20 * * 1-5 /bin/sh /root/backup.sh

O caminho absoluto do interpretador e o shell script como parâmetro.



Vou tentar rodar dessa forma, entretanto isso não explicaria porque o script backup.sh funciona quando a correção não roda, e quando a correção roda o script backup.sh não funciona. Lembrando que backup.sh roda antes, e com tempo suficiente para concluir os trabalhos, antes que o correcao.sh inicie.

Agradeço a atenção






9. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 15/07/2015 - 14:52h

Tentei com essa sintaxe /bin/sh e nenhum dos scripts rodou. Creio que root é a sintaxe correta.

Alguém consegue imaginar qual o problema?


10. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 15/07/2015 - 16:07h

Oi,

Como você está editando o crontab? Pelo arquivo /etc/crontab ou pelo comando crontab -e ?

Se estiver usando o /etc/crontab, o usuário deve ser especificado em todas as entradas. Se estiver usando o comando crontab -e , o usuário não deve ser especificado ( esse comando edita o crontab do usuário logado ).

Sobre o comando ntpdate, se o serviço ntpd estiver instalado e rodando, você deve para-lo antes de executar o ntpdate, assim:



/etc/init.d/ntpd stop

/usr/sbin/ntpdate -ub pool.ntp.org

/etc/init.d/ntpd start



Além disso, recomendo que você utilize o parametro -b no comando ntpdate.

Sobre os scripts de correção, utilize apenas o segundo ( se necessário, adicionando a parte do ntpd que comentei antes ).

Além de não ser necessário executar os 2 scripts de correção, a logica me parece equivocada... Quando você usa o && está especificando o seguinte: Se o primeiro comando for executado corretamente, execute o segundo. Logo, se o primeiro comando falha o segundo não é executado.

Também acho interessante tirar os sleep's.

Uma última sugestão é deixar uma linha em branco no final do crontab. Nunca aconteceu comigo, mas existem rumores que sem essa linha em branco no final ocorre um bug no crontab.

Paulo Dias.

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


11. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Viva Anyone Ubunty
anyone2

(usa Ubuntu)

Enviado em 17/07/2015 - 11:46h

Camarada, muito obrigado pela atenção e disponibilidade.

Primeiramente, respondendo as perguntas. Edito o crontab pelo arquivo no /etc/crontab. Especifiquei como root.

O sistema não tem esse arquivo:
/etc/init.d/ntpd  


Mas tem esse:
/usr/sbin/ntpdate 


Enfim, retirei os sleeps, adicionei uma linha no final do crontab (em branco) e rodei um script apenas.

O script não funcionou, ou seja, não ligou o servidor. Entretanto, eu afirmo que houve um progresso, visto que o backup foi realizado. Como havia dito anteriormente, nas vezes em que o script de correção deveria rodar, o backup não era realizado (mesmo que estivesse programado pra rodar antes da correção)

Agora só falta fazer com que o script de correção, de fato coloque o sistema para rodar.

O fato do serviço não possuir arquivo no /etc/init.d/ntpd significa que o serviço pode não estar instalado? Pq existem o ntpdate (no /usr/sbin) e o ntpdate-debian (mesmo diretório)...




12. Re: CRONTAB e Shell Script - Dúvidas - UBUNTU 8.10

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 17/07/2015 - 11:57h

Oi. Se arquivo ntpd não existe, não precisa para-lo.

O script de correção funciona manualmente?

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts