Por que um script em funcionamento não é executado como uma tarefa cron? [duplicado]

5

Eu escrevi um script para fazer backup de um banco de dados. Quando eu o executo diretamente, funciona. Eu tentei fazer um trabalho cron e enquanto ele roda (eu verifiquei com service status cron ) parece que ele silenciosamente falha.

Aqui está o script:

#!/bin/bash
echo "Starting mongo backup"
mkdir /home/ubuntu/backups
docker exec -it mongodb mongodump --archive=/root/mongodump.gz --gzip
docker cp mongodb:/root/mongodump.gz /home/ubuntu/backups/mongodump_$(date +%Y-%m-%d_%H-%M-%S).gz
echo "Mongo dump complete"
printf "[default]\naccess_key=\nsecret_key=\nsecurity_token=\n" > ~/.s3cfg
s3cmd put /home/ubuntu/backups/* s3://my-backup-bucket/
echo "Copy to S3 complete"
rm /home/ubuntu/backups/* -r
echo "Files cleaned"

Eu usei apenas caminhos absolutos (EDIT: sim, na verdade eu não fiz) , nenhuma variável de ambiente, nenhum% não-escapado. Eu não sei o que senti falta.

    
por Billybobbonnet 29.03.2018 / 08:41

1 resposta

4

Um possível motivo é que você não usa caminhos absolutos para os comandos e alguns dos seus comandos não estão localizados em /usr/bin ou /bin que pertencem a $PATH envvar no Cron por padrão.

Você pode descobrir onde está localizado cada executável de seus comandos pelo comando which , por exemplo, which s3cmd . Então você pode colocar os comandos com seus caminhos absolutos no seu script.

Outra abordagem é atribuir um novo valor para $PATH em seu script ou em crontab : Por que os scripts crontab não estão funcionando?

Você pode redirecionar a saída do seu Cronjob para um arquivo para depurar onde está o problema. Para este propósito, modifique seu trabalho desta maneira:

* * * * * /path/to/the-script >/path/to/log-file 2>&1

Além disso, prefiro usar $HOME em vez de ~ nos scripts.

    
por pa4080 29.03.2018 / 09:09