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