Crontab não executa Script

Iniciado por pentestbox, 14 de Novembro de 2016, 15:22

tópico anterior - próximo tópico

pentestbox

Ola pessoal, estou tentando agendar via crontab para executar um Script de 5 em 5 minutos no sistema, so que o crontab não executa o script, gostaria da ajuda de vcs para resolver o problema, o que fiz foi assim:

$ sudo crontab -e

No arquivo do contrab coloquei

5 * * * * /home/lab/bkp.sh

Fiz dessa maneira e nada acontece, gostaria de saber como fazer o crontab executar  o script, que por sinal é um script simples que faz uma cópia de uns arquivos de um lugar para o outro no mesmo sistema, quando rodo o script separado ele funciona perfeitamente, o problema esta sendo no crontab.
conto com a ajuda de vcs.
Desde já Obrigado.

zekkerj

Executar aplicações no cron é um pouco traiçoeiro. Você precisa estar atento pra algumas coisas:
1. Não há gráficos disponíveis.
2. Não há teclado disponível (você não pode fazer entrada de nada, nem de senhas, caso use "su" ou "sudo").
3. O ambiente de execução é reduzidíssimo, então várias vezes você tenta chamar um outro aplicativo e ele simplesmente não está no "path".

Aposto que o que te derrubou foi a armadilha #3. Verifique teu script, se vc não está chamando algum aplicativo que não esteja em /bin:/usr/bin.
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

selvaking

Crie o diretório ~/bin do usuário e coloque o script dentro. Este diretório já se encontra no PATH, só falta criar ele.
Abra um terminal como usuário normal (Não root) e execute o comando abaixo.

mkdir ~/bin

No seu caso será criada a pasta /home/lab/bin

Mova o script pra dentro dela e modifique o caminho no crontab. O script deve tá marcado pra execução.

chmod +x /home/lab/bin/bkp.sh
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

pentestbox

Citação de: zekkerj online 15 de Novembro de 2016, 10:31
Executar aplicações no cron é um pouco traiçoeiro. Você precisa estar atento pra algumas coisas:
1. Não há gráficos disponíveis.
2. Não há teclado disponível (você não pode fazer entrada de nada, nem de senhas, caso use "su" ou "sudo").
3. O ambiente de execução é reduzidíssimo, então várias vezes você tenta chamar um outro aplicativo e ele simplesmente não está no "path".

Aposto que o que te derrubou foi a armadilha #3. Verifique teu script, se vc não está chamando algum aplicativo que não esteja em /bin:/usr/bin.

O aplicativo que esta no meu script é o Rsync, ele será usado para fazer as cópias dos meus arquivos para o diretório /var/www/html do apache, acho que o que esta pegando é realmente essa questão do sudo que estou usando, uma vez que o meu usuário não tem permissão de escrever no diretório /var/www/html, então eu pensei que ao utilizar o sudo tendo permissão de root eu conseguiria fazer esse script funcionar no crontab.

o meu script está assim:

#!/bin/bash

rsync=`rsync -avz /home/lab/*.sh /var/www/html`

$rsync


É apenas um script de teste bobo, apenas estou testando pois estou aprendendo shell script, so que me deparei com esse problema do sudo, e por isso quero tentar resolver, pois futuramente em scripts importantes eu precisarei utilizar com as permissões de sudo.

zekkerj

#4
Ponha o caminho completo pro "rsync" no comando, deve resolver.

Quanto ao sudo, como eu disse na armadilha #2, não há teclado disponível, entaõ o sudo não pode ler uma senha.
Solução: cadastre o seu usuário pra não precisar de senha no sudo, pra esse comando. Vc usa o comando "visudo" pra editar o arquivo /etc/sudoers (não tente editá-lo diretamente de forma nenhuma!!!), adicione esta linha ao final:

fulano ALL=(ALL) NOPASSWD: /usr/bin/rsync
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

selvaking

Então falta vc colocar no seu crontab o usuário que vai executar o script que no seu caso é o root.

5 * * * *   root     /home/lab/bkp.sh
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

zekkerj

Isso não é necessário no crontab local, acionado pelo comando "crontab -e".
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

pentestbox

Ole pessoal, acho que consegui resolver, coloquei o caminho completo do rsync no script e parece que agora foi, so que as vezes eu acho que não vai de 5 em 5 minutos, as vezes acho que demora mais tempo, mas enfim vou continuar fazendo mais alguns testes aqui pra ver.

zekkerj

Pode ser o tempo pra executar a cópia. Com mais ou menos quantidade de arquivos, vai variar o tempo pra vc perceber alteração no diretório de destino.
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