Script não roda no Cron [RESOLVIDO]

1. Script não roda no Cron [RESOLVIDO]

Carlos Eduardo de Laia Santos
carlosesantos

(usa Linux Mint)

Enviado em 18/03/2014 - 15:59h

Boa tarde a todos!!!

Galera, a um tempo atrás eu estava tendo no shell, de como achar o ultimo arquivo colocado em um diretório. Na época eu testei os dois comandos, que o pessoal aqui do forum me ajudou a montar, e os dois funcionaram muito bem, mas um que usava o comando find estava dando alguns erros. O que eu gostaria de saber é o seguinte, no meu script eu so preciso deste comando pra selecionar um arquivo e enviar ele pra outro servidor, quando eu rodo o script na mão, ele funciona perfeitamente... Porém quando eu coloco ele no cron, o script não funciona, a princípio eu pensei que fosse por causa dos erros que ele estava apresentando, ai eu corrigi todos, e mesmo assim o script não roda no cron, so roda se for a mão, ai ele funciona perfeitamente. Eu ja dei todas as permissões que ele precisava e o unico comando que falha é esse:

cp "`ls -1trap | grep -v '/$' | tail -n 1`" $DIR

Será que alguem que já passou por isto saberia me ajudar???
Desde já eu agradeço pela atenção!!!


  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 23/03/2014 - 16:33h

Usando a interpretação de texto

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.


você troca:


find . -type f -maxdepth 1 -printf "%C@ %p\\n" | sort -r | awk 'NR==1 {print $2}' | xargs -i cp "{}" $DIR


por


find . -maxdepth 1 -type f -printf "%C@ %p\\n" | sort -r | awk 'NR==1 {print $2}' | xargs -i cp "{}" $DIR


e deve funcionar...

Outra coisa que é muito importante é que quando você roda um script no cron ele roda em um subshell, e usa como diretório base o home do usuário que está rodando e não o diretório atual, de forma que você deverá sempre usar o caminho completo dos diretorios e arquivos...

Por exemplo, substitua
find . -maxdepth 1
por
find /caminho/completo/do/diretorio -maxdepth 1

Substitua
cp "`ls -1trap | grep -v '/$' | tail -n 1`" $DIR
por
cp "`ls -1trap /caminho/completo/do/diretorio | grep -v '/$' | tail -n 1`" $DIR


3. Re: Script não roda no Cron [RESOLVIDO]

Carlos Eduardo de Laia Santos
carlosesantos

(usa Linux Mint)

Enviado em 19/03/2014 - 14:29h

E ai pessoal, alguém saberia me ajudar???


4. Re: Script não roda no Cron [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 19/03/2014 - 14:41h

Ameace o cron com a fúria de Crom, deve funcionar rsrsrs

Brincadeiras à parte, posta aqui seu shell script e a mensagem de erro que dá quando a linha acima dá erro.


5. Re: Script não roda no Cron [RESOLVIDO]

Carlos Eduardo de Laia Santos
carlosesantos

(usa Linux Mint)

Enviado em 20/03/2014 - 14:35h

rsrsrsrsrsrsrsrsrs.... Eu estou postando parte do código que não roda quando ele está no cron, o comando que dava erro era este:

find . -type f -maxdepth 1 -printf "%C@ %p\\n" | sort -r | awk 'NR==1 {print $2}' | xargs -i cp "{}" $DIR

Ai surgia a seguinte mensagem:

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.

Ai o que eu fiz foi utilizar outro comando que fazia a mesma coisa, e quando eu rodo na mão não aparece mensagem alguma de erro, so que no cron ele simplesmente não roda. O script novo ficou assim.


test -e $DIR/*.pdf && rm $DIR/*

cp $origem/*.pdf $d_script


cp "`ls -1trap | grep -v '/$' | tail -n 1`" $DIR


rm $d_script/*.pdf




6. Re: Script não roda no Cron [RESOLVIDO]

Carlos Eduardo de Laia Santos
carlosesantos

(usa Linux Mint)

Enviado em 24/03/2014 - 15:28h

Nossa galera, valeu mesmo pela ajuda.

phoemur realmente foi como você havia falado, a primeira alteração corrigiu todos os erros, e a segunda, onde eu deveria informar o caminho do diretório no comando permitiu que o cron executasse corretamente. Muito obrigado mesmo, você salvou a minha vida cara, eu ja tava quase enlouquecendo com esse comando.... rsrsrsrsrs!!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts