Backup agendado do Crontab não está em execução

0

Eu preciso que a compactação ZIP aconteça em uma unidade diferente do servidor devido ao espaço limitado.

Aqui está o comando é a linha que eu uso no crontab:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

Ele deve ser exibido diariamente às 01:00, mas isso não acontece. Parece ser pego no cd /directory .

Se eu executar isso manualmente, tudo funcionará bem.

    
por Kris Sandberg 22.08.2015 / 05:06

1 resposta

1

Aqui está o seu comando crontab:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

Você afirma:

If I run this manually it works fine.

Então o que isso tudo significa é que o comando funciona perfeitamente quando você está logado, mas não em um crontab correto?

Bem, olhe para o seu comando. Especificamente, o zip . Quando você está logado em seu sistema, o sistema sabe procurar seus caminhos configurados — que são carregados somente se você efetuar login — para o binário zip . Mas quando você está executando isso como crontab , não há caminhos de pesquisa para binários e outros; você precisa explicitamente definir o caminho para o zip binário.

Portanto, eu recomendaria executar which para ver onde o binário zip está realmente localizado assim:

which zip

O valor retornado deve ser algo assim; este é o lugar onde está instalado no meu Ubuntu 12.04 local:

/usr/bin/zip

Faça o mesmo com date da seguinte forma:

which date

E a saída retornada deve ser algo como:

/bin/date

Agora, sabendo disso, ajuste sua entrada crontab para chamar explicitamente o caminho completo para zip da seguinte forma:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

E tudo deve funcionar bem.

Dito isso, colocar comandos compostos como esse em um crontab - especialmente para um script de backup - é uma prática de retorno. O script pode funcionar, mas no final, torna-se um pouco complicado e confuso para manter.

Por isso, recomendo criar um script Bash simples com esses comandos e, em seguida, executar crontab nesse script Bash. O conteúdo desse script Bash pode ser algo simples assim:

#!/bin/bash
cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

Note que eu removi osmc , já que isso não é um comando; Eu acredito que é uma referência para o seu usuário? Então, digamos que o script Bash tenha o nome my_backup.sh e esteja no seu diretório de usuários chamado /home/kris . Em seguida, a nova entrada crontab seria:

00 1 * * * /home/kris/my_backup.sh

Uma configuração como essa é muito mais fácil de manter na minha humilde opinião. E certifique-se de que o script seja executável executando chmod desta forma:

chmod 744 /home/kris/my_backup.sh
    
por 22.08.2015 / 05:33