Autor Tópico: Como colocar arquivo sh no Crontab com parâmetros  (Lida 4190 vezes)

Offline velox256

  • Usuário Ubuntu
  • *
  • Mensagens: 1.915
  • Debian é Debian... :)
    • Ver perfil
    • Linux Inside
Como colocar arquivo sh no Crontab com parâmetros
« Online: 30 de Julho de 2014, 13:41 »
Moçada,

estou tentando colocar um arquivo sh com parâmetros no Crontab para fazer checagens passivas para um servidor Nagios; pesquisei "aqui e ali" e não vi nada referente a parâmetros, então vamos lá. O comando total é esse:

Citar

./send_nrdp.sh -u http://10.10.10.10/nrdp -t bibibibububu -H piupiu -S 0 -o Servidor ativo.


Como é um script sh, então tem o ./ na frente e esse comando funciona certinho na linha de comando, mas qdo vai no Cron não funciona. O que está em vermelho é o endereço (falso...) do servidor nrdp; em rosa é o token (também falso) de autenticação; em azul o nome do host que está enviando a requisição; em laranja o estado que deve ser reportado (0=OK) e em marrom a msg que eu quero que seja mostrada na interface web do monitoramento.

No Crontab deixei assim (para enviar o comando de 1 em 1 minuto):

Citar

1 * * * * ./send_nrdp.sh -u http://10.10.10.10/nrdp -t bibibibububu -H piupiu -S 0 -o Servidor ativo.


Tentei também, pesquisando aqui:

Citar

1 * * * * exec send_nrdp.sh -u http://10.10.10.10/nrdp -t bibibibububu -H piupiu -S 0 -o Servidor ativo.


mas não está funcionando. Alguém tem alguma dica aí? Esse script é um script que pega os dados dos parâmetros e os envia. Estou rodando o script com o usuário "normal", sem permissões especiais, por isso o nome do usuário não está lá no Crontab.
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.

Offline Rockwave

  • Usuário Ubuntu
  • *
  • Mensagens: 223
    • Ver perfil
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #1 Online: 30 de Julho de 2014, 13:57 »
Passa o caminho completo do arquivo que será executado.

Offline velox256

  • Usuário Ubuntu
  • *
  • Mensagens: 1.915
  • Debian é Debian... :)
    • Ver perfil
    • Linux Inside
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #2 Online: 30 de Julho de 2014, 14:21 »
Está na pasta do usuário (/home/usuario), ele roda sem precisar de alguma permissão especial (não precisa ser admin da máquina).

Passa o caminho completo do arquivo que será executado.
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.

Offline Rockwave

  • Usuário Ubuntu
  • *
  • Mensagens: 223
    • Ver perfil
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #3 Online: 30 de Julho de 2014, 14:39 »
Está na pasta do usuário (/home/usuario), ele roda sem precisar de alguma permissão especial (não precisa ser admin da máquina).

Passa o caminho completo do arquivo que será executado.
Acho que você me entendeu errado, quis dizer para você colocar o caminho inteiro do executavel, em vez de usar o ./
Provavelmente o cron não ta achando o arquivo. Se mesmo assim não funcionar coloque o log do cron para darmos uma olhada.

Abs

Offline velox256

  • Usuário Ubuntu
  • *
  • Mensagens: 1.915
  • Debian é Debian... :)
    • Ver perfil
    • Linux Inside
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #4 Online: 30 de Julho de 2014, 14:56 »
Pois é, como o script não precisa de permissão de root, ele está na home do usuário e não nos executáveis /bin ou /sbin, no Crontab eu coloco assim:

Citar
1 * * * * /home/usuario/./send_nrdp.sh -u http://10.10.10.10/nrdp -t bibibibububu -H piupiu -S 0 -o Servidor ativo.

Eu sei que estou fazendo besteira, só não sei onde, hehehe... Vi por aqui se o comando tiver saída de texto, o Cron não funciona. também vi que se utilizar a opção -q a saída de texto é omitida. A saída, no caso desse script, é:

Citar
Sent 1 checks to http://10.10.10.10/nrdp

A saída do cron é:

Citar
CRON[2292]: (root) CMD (exec /home/sidnei/send_nrdp.sh -u http://10.10.10.10/nrdp -t bibibibububu -H piupiu -S 0 -o Servidor ativo.

Depois aparece que "No MTA Installed, discarding output.
Está na pasta do usuário (/home/usuario), ele roda sem precisar de alguma permissão especial (não precisa ser admin da máquina).

Passa o caminho completo do arquivo que será executado.
Acho que você me entendeu errado, quis dizer para você colocar o caminho inteiro do executavel, em vez de usar o ./
Provavelmente o cron não ta achando o arquivo. Se mesmo assim não funcionar coloque o log do cron para darmos uma olhada.

Abs
« Última modificação: 30 de Julho de 2014, 15:16 por velox256 »
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.

Offline Rockwave

  • Usuário Ubuntu
  • *
  • Mensagens: 223
    • Ver perfil
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #5 Online: 30 de Julho de 2014, 15:12 »
O log do cron fica em
Código: [Selecionar]
/var/log/syslog ja que esse script deve rodar a cada minuto faça o seguinte
Código: [Selecionar]
tail -f /var/log/syslog | grep cron assim você consegue ver o log no momento em que ele for gerado. Sobre a saida de texto eu colocaria algo do tipo
Código: [Selecionar]
comando >> /home/usuario/comando_xxx.log para ver a saida de texto que é gerada pelo comando.

Offline velox256

  • Usuário Ubuntu
  • *
  • Mensagens: 1.915
  • Debian é Debian... :)
    • Ver perfil
    • Linux Inside
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #6 Online: 30 de Julho de 2014, 18:10 »
Engraçado, o conteúdo do contrab -e está pelado, tirando as instruções básicas de uso que estão comentadas. Lendo aqui e ali (de novo), dei um " crontab /etc/crontab " e ele "povovou" o arquivo com:

Citar
SHELL=/bin/sh
PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

e mais umas tarefas básicas de teste, mostradas na saída de log do syslog qdo rodam; coloquei uma tarefa simples pra abrir o Nautilus e o Terminal (xterm) e os comandos não funcionam, não abre nada e não aparece nada no syslog referente a esses comandos.

Coloquei também um link simbólico para o arquivo sh (apenas o arquivo) em /usr/bin (ou seja, dentro do path lá do Crontab e se eu digitar no terminal o send_nrdp mais os parâmetros (sem o ./) o comando funciona no terminal mas ainda não roda no Crontab... Agora acho que não é mais problema do Crontab não achar o arquivo...
« Última modificação: 30 de Julho de 2014, 18:13 por velox256 »
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.

Offline zekkerj

  • Usuário Ubuntu
  • *
  • Mensagens: 19.735
  • Gratidão gera gratidão, lamúria atrai lamúria...
    • Ver perfil
    • Blog do Zekke
Re: Como colocar arquivo sh no Crontab com parâmetros
« Resposta #7 Online: 03 de Agosto de 2014, 16:22 »
Citar
Vi por aqui se o comando tiver saída de texto, o Cron não funciona.

Não, funciona na boa. Toda a saída de texto que o processo tenha vai pra um email enviado para o usuário que rodou o cron.
O que não funciona é entrada de texto (teclado) ou saída gráfica.

A dica do Rockwave é perfeita, vc deve chamar o seu script passando o caminho completo.

O "." no caminho de um arquivo significa "diretório corrente". Quando vc escreve um caminho completo, não faz sentido colocar o "./", pq isso significa algo como "aqui", é como se não tivesse nada lá, só serve pra aumentar a string.

Outra dica que eu te dou... quando for executar um script, em vez de chamá-lo diretamente, chame o shell que vai executá-lo (normalmente o "/bin/bash"). Outra coisa a ter em mente é que o cron executa seus processos com ambiente reduzido, até mesmo o PATH é incompleto. Esteja preparado pra lidar com isso.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D