Como colocar arquivo sh no Crontab com parâmetros

Iniciado por velox256, 30 de Julho de 2014, 13:41

tópico anterior - próximo tópico

velox256

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.

Rockwave

Passa o caminho completo do arquivo que será executado.

velox256

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).

Citação de: Rockwave online 30 de Julho de 2014, 13:57
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.

Rockwave

Citação de: velox256 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).

Citação de: Rockwave online 30 de Julho de 2014, 13:57
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

velox256

#4
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:

Citar1 * * * * /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, é:

CitarSent 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.
Citação de: Rockwave online 30 de Julho de 2014, 14:39
Citação de: velox256 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).

Citação de: Rockwave online 30 de Julho de 2014, 13:57
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
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.

Rockwave

O log do cron fica em /var/log/syslog ja que esse script deve rodar a cada minuto faça o seguinte 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 comando >> /home/usuario/comando_xxx.log para ver a saida de texto que é gerada pelo comando.

velox256

#6
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...
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.

zekkerj

CitarVi 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