cron não está executando o trabalho bash

0

então eu tenho visto algo realmente estranho e talvez simples? mas não tão simples que não consegui descobrir. Eu escrevi um script bash simples que eu sou capaz de executar sem problemas normalmente, o problema vem quando eu agendar uma tarefa cron que, em seguida, não executa o meu script.

O script é executável, o script pode ser executado manualmente sem erros / problemas. Eu tentei adicioná-lo ao crontab com o seguinte:

# crontab -l
  30 * * * * /usr/scripts/test_script.sh

Eu também tentei adicionar um arquivo em /etc/cron.d/test_script e tentei especificar o caminho e o shell:

# cat /etc/cron.d/tes_script
PATH=/bin:/usr/bin:/sbin:/usr/sbin
SHELL=/bin/bash
30 * * * * /usr/scripts/test_script.sh

Eu tentei verificar os logs com tailf /var/log/syslog e vejo o seguinte:

Feb 7 10:53:01 CRON[29203]: (root) CMD (/usr/scripts/test_script.sh)

então parece que pode ser runnign, mas na realidade não é, (ele dispara um processo de atualização que pode ser visto em uma interface web para o programa).

há algo que eu possa estar perdendo? Aqui está o script

#!/bin/bash
DIST="ubuntu"
LOGS="/var/logs/test_script.log"
RECIPIENTS="[email protected]"
declare -a POCKET=("release" "security" "updates")

xenial()
{
SERIES="xenial"
for pocket in "${POCKET[@]}"
do
        bzip2 -d "$HOLDER"*.bz2
        sync-pocks "$pocket" "$SERIES" "$DIST"
        sleep 5m
done
return 0
}

precise()
{
SERIES="precise"
for pocket in "${POCKET[@]}"
do
        bzip2 -d "$HOLDER"*.bz2
        sync-pocks "$pocket" "$SERIES" "$DIST"
        sleep 5m
done
return 0
}

xenial &> "$LOGS" &&
precise &>> "$LOGS" ||
cat "$LOGS" | mailx -s "Sync" "$RECIPIENTS"

Poderia algum problema de sintaxe no script? e se sim, por que ele seria executado sem problemas quando executado manualmente?

    
por user3311890 07.02.2017 / 17:08

3 respostas

0

Muito tarde, mas imaginei a solução: execute o script com a opção -l. o cronjob não será executado por causa das variáveis que eu tinha configurado no meu shell de login, também não registrará nenhum erro. Conforme a página man:

-l Make bash act as if it had been invoked as a login shell (see INVOCATION below).

então meu crontab ficará assim:

30 * * * * /usr/scripts/test_script.sh
    
por 24.04.2017 / 15:06
0

Estas são algumas estimativas baseadas no seu código:

  1. Em que diretório estão seus arquivos "$HOLDER"*.bz2 ? Eu não vejo nenhum comando cd no seu script. Provavelmente o script é executado no diretório errado .
  2. A variável $HOLDER é indefinida.
  3. O sync-pocks está no seu caminho?
por 07.02.2017 / 17:40
0

Quando o cron o executa, ele é executado com o shell 'sh', que não suporta a sintaxe &> . Poderia ter funcionado corretamente com a sintaxe SHELL que você definiu para o /etc/cron.d/tes_script, mas os arquivos em /etc/cron.d precisam de uma sintaxe diferente (adicionando o nome de usuário como um campo), que você não usou .

Para corrigir isso, defina SHELL=/bin/bash no seu próprio crontab.

    
por 07.02.2017 / 18:33