Fórum Ubuntu Linux - PT
Suporte Técnico => Sistema => Tópico iniciado por: pentestbox em 14 de Novembro de 2016, 15:22
-
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.
-
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.
-
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
-
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.
-
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
-
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
-
Isso não é necessário no crontab local, acionado pelo comando "crontab -e".
-
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.
-
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.