Atualizar um crontab para tar arquivos novos / atualizados a cada 5 horas

Nov 30 2020

Estou tentando criar um comando para um crontab para tar todos os arquivos novos / atualizados (de quando o cron foi executado pela última vez). O cron deve ser executado a cada 5 horas.

  1. Quero fazer backup de todos os arquivos contidos na pasta, /home/swayrainesincluindo sua subpasta
  2. Eu quero salvar um tar com esses arquivos aqui folder/backup/back.tar
  3. O crontab deve ser executado a cada 5 horas
  4. Apenas os arquivos que foram adicionados ou editados desde a última vez que o cron foi executado precisam ser adicionados ao arquivo. Portanto, a menos que seja novo / editado, não deve ser salvo.
  5. Eu quero salvar o resultado em um log com stdout e stderr aqui folder/backup/backlog.log

Então eu pensei que a melhor maneira de proceder é findadicionar / editar os arquivos nas últimas 5 horas, e então taresses arquivos, antes de gerar stdout e stderr em um .log, mas não está funcionando e não tenho certeza do que está errado.

Aqui está o que parece até agora (atualizado para incluir uma resposta parcial):

  0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

update O problema é que agora ele cria um novo arquivo tar toda vez que o crontab é executado, e o arquivo contém apenas o arquivo mais recente adicionado.

update 2 Só para ficar claro, eu declarei inicialmente que queria criar um novo arquivo a cada 5 horas, mas ao invés disso, quero atualizar o arquivo e anexar apenas os novos arquivos. Portanto, acredito que preciso alterar o comando tar para -uvf?

Respostas

1 Lee3 Dec 01 2020 at 04:27

Use números assinados para o argumento. 300 significa modificado exatamente 300 minutos atrás. -300 é menos de 300 minutos atrás. +300 seria mais de 300 minutos atrás.

ATUALIZAÇÃO 1

O argumento para -execdeve terminar com \;, assim:

 0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

Isso será executado sem problemas, mas ao executar o comando em um arquivo por vez, você acabará com apenas o último arquivo em que opera compactado no arquivo tar . Eu sugiro que você escreva o comando para copiar os arquivos para um diretório temporário, comprimir o diretório temporário e, em seguida, remover o diretório temporário.

ATUALIZAÇÃO 2

Corrigir. Você pode usar -r --appendou -u --updatese quiser anexar os arquivos alterados ao final do arquivo tar , mas o arquivo tar terá que ser criado primeiro. Ele não criará o arquivo se ele não existir. É importante observar que esses comandos não substituem a versão anterior, portanto, se você não precisa das duas versões, deve usar --deleteprimeiro e, em seguida, anexar a nova versão.

Além disso, observe que este não será um arquivo tar compactado . Você não pode atualizar arquivos tar compactados sem descompactar / recompactar. É por isso que você não pode combinar as opções -ze -ur.