Não é possível executar o Script Bash de Crontab quando ele funcionar a partir de linha de comando Bash -- bash campo com scripts campo com cron camp askubuntu Relacionado O problema

Cannot run bash script from crontab when it works from command line bash


3
vote

problema

português

Eu tenho um estranho problema de ser capaz de executar um script bash da linha de comando, mas não da entrada Crontab for root. Eu estou executando o Ubuntu 12.04.

  * * * * 1-5 root /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log    

Se eu executar o script da linha CMD usando o Bash, funciona bem, mas falha com sh com o seguinte erro:

  jmeter-cron-randomise.sh: 7: jmeter-cron-randomise.sh: arithmetic expression: expecting primary: "  % 1 "    

Tendo googled o problema parece que o Stand Shell não tem os mesmos operadores de matemática como% (módulo) como Bash. Não tenho certeza porque o trabalho do cron está falhando no script? Eu estou assumindo é porque não está usando o Shell Bash? É definitivamente disparado pelo daemon cron (pode vê-lo em / var / log / syslog). Qualquer ajuda muito apreciada.

script fazendo os problemas

  #!/bin/bash echo Running the jmeter-cron-randomiser script   script="/home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron.sh"      min=$(( 1 * 1 )) rmin=$(( $RANDOM % $min ))  echo  "min = ${min}"; echo  "rmin = ${rmin}"  at -f "$script" now+${rmin}min    
english

I have a strange problem of being to able to run a bash script from commandline but not from the crontab entry for root. I am running Ubuntu 12.04.

* * * * 1-5 root /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log 

if i run the script from the cmd line using bash it works fine but fails with sh with following error:

jmeter-cron-randomise.sh: 7: jmeter-cron-randomise.sh: arithmetic expression: expecting primary: "  % 1 " 

Having googled the problem it seems like stand shell doesn't have the same maths operators like % (modulus) like bash. Not sure why the cron job is failing in the script? i am assumming its because its not using the bash shell? It's definitely being fired by the cron daemon (can see it in /var/log/syslog ). Any help much appreciated.

script causing the problems

#!/bin/bash echo Running the jmeter-cron-randomiser script   script="/home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron.sh"      min=$(( 1 * 1 )) rmin=$(( $RANDOM % $min ))  echo  "min = ${min}"; echo  "rmin = ${rmin}"  at -f "$script" now+${rmin}min 
        
         
         

Lista de respostas

4
 
vote

eu notei no crontab (5) Man Page, isto:

.

O campo `` sexto '' (o resto da linha) especifica o comando a ser corre. Toda a parte de comando da linha será executada por / bin / sh ou pelo shell especificado na variável shell do cronfile.

Então, você pode querer especificar Bash com

  SHELL=/bin/bash    

ou, como o acima afeta todos os scripts do cron, este

  * * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log # ...............^^^^    
 

I note in the crontab(5) man page, this:

The ``sixth'' field (the rest of the line) specifies the command to be run. The entire command portion of the line will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile.

So, you may want to specify bash either with

SHELL=/bin/bash 

or, as the above affects all cron scripts, this

* * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log # ...............^^^^ 
 
 
         
         
0
 
vote

O crontab faz Execute o script com bash ;

Mas você está executando isso recursivamente com at .

e at usa /bin/sh .

Por causa de um problema anterior, a especificação de tempo para at é now+0min - por isso está correndo novamente no final.

Essa corrida falha, então não há loop, pelo menos.

O problema que leva ao now+0min é que n % 1 é 0, então * * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log # ...............^^^^ 0 = 0, e * * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log # ...............^^^^ 1 = 0.

Adicione uma segunda linha

  * * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log # ...............^^^^ 2   

Para o script para melhor log, você será a última linha com o 0 TimeSpec.

 

The crontab does run the script with bash;

But you're running it recursively with at.

And at uses /bin/sh.

Because of an earlier problem, the time specification for at is now+0min - so it's running again just at the end.

That run fails, so there is no loop, at least.

The problem leading to the now+0min is that n % 1 is 0, so $RANDOM % 1 = 0, and rmin = 0.

Add a second line

set -x 

to the script for better logging, you'll the last line with the 0 timespec.

 
 
         
         

Perguntas relacionadas

158  Alterando o Editor de Crontab Padrão  ( Changing default crontab editor ) 
Eu estou tentando alterar o editor padrão de nano para vim . Eu executo os seguintes comandos: sudo update-alternatives --config editor e update...

1  Como acionar o Anacron Iniciar se a unidade USB conectada  ( How to trigger anacron start if usb drive connected ) 
Há um script em /usr/lib/pm-utils/power.d/anacron , que reinicia o Anacron se os candidatos estiverem conectados à energia. É possível ter um script similar ...

19  Ubuntu 16.04: Upgrades desacompanhados é executado em tempos aleatórios  ( Ubuntu 16 04 unattended upgrades runs at random times ) 
Eu configurei upgrades autônomos para instalar pacotes de segurança e notificar por correio quando ele o fizer. Eu notei que a instalação acontece em moment...

4  Como posso mostrar notificar mensagens acionadas por Crontab? [duplicado]  ( How can i show notify send messages triggered by crontab ) 
. Esta pergunta já tem respostas aqui : trabalho cron para executar o script Python na Reinicializaçã...

3  Crontab e SSMTP  ( Crontab and ssmtp ) 
Meu servidor é o Ubuntu 12.04.3 Os trabalhos de Cron estão funcionando bem. Eu posso enviar e-mails através da linha de comando, usando mail , abcdefghijklm...

0  Existe uma maneira de saber se a transmissão-daemon atualmente ativa?  ( Is there a way to know if transmission daemon currently active ) 
Eu tenho um laptop que eu uso como uma estação de mídia conectada à minha TV, ocasionalmente eu cairia um sono e esqueceria de desligar o laptop e que é compo...

2  Os trabalhos especificados em / etc / crontab estão sendo executados no tempo de Wong, por quê? [duplicado]  ( The jobs specified in etc crontab are running at the wong time why ) 
. Esta pergunta já tem respostas aqui : A que horas executa scripts diários? ...

0  É possível desligar o computador e mantê-lo fora [duplicado]  ( It it possible to turn computer off and keep it off ) 
. Esta pergunta já tem respostas aqui : Como restringir o tempo de computação dos meus filhos? ...

7  Configurar Cron Backup Semanal  ( Setup cron weekly backup ) 
Eu quero fazer um backup do meu /var/lib/mysql e /var/www pastas e salve-os como arquivos tar.gz para o meu servidor de rede de rede montado (USLONS001). ...

3  Como verificar o uso da rede em minutos anteriores  ( How to check network usage over past x minutes ) 
Eu tenho um mídia PC (que também é um servidor de teste da Web na LAN) que eu quero reiniciar de vez em quando, desde que não esteja em uso. Eu tenho testes n...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.