Crie arquivos zip em / var / www / html usando crontabs

3

Como o título explica, eu preciso pegar um arquivo e colocá-lo em um arquivo zip uma vez por dia; Além disso, o arquivo zip deve ser movido em / var / www / html, onde os scripts .php permitem que os usuários façam o download.

Assumindo isso:

  • o caminho absoluto do arquivo é /home/myuser/working-directory/file.txt
  • Eu coloquei todos os arquivos de script que eu preciso executar usando cronjobs em /usr/scripts
  • Eu programei o seguinte cronjob usando sudo crontab -e , de crontab -e porque / var / www / html precisa de administrativa privilégios

Os resultados dos meus pensamentos são os seguintes:

create-zip.sh

#!/bin/bash

cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt && cd /home/myuser && zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt && rm file.txt && rm /var/www/html/my-zip-file*.zip && mv my-zip-file*.zip /var/www/html && cd

sudo crontab -e

@daily sh /usr/scripts/create-zip.sh

Bem, isso não funciona. Eu acho que o problema é algo relacionado com privilégios porque eu recebo file.txt copiado em /home/myuser , e também o zip é criado. Mas então eu não consigo mover o zip para /var/www/html , mesmo se o crontab estiver sendo executado sob privilégios de Root.

Alguma ideia?

Além disso, como um .zip é criado uma vez por dia, eu preciso remover o arquivo .zip anterior de / var / www / html antes de mover o novo. Eu tentei usar

rm /var/www/html my-zip-file-*.zip

(verifique o arquivo create-zip.sh acima), mas ele também não funciona ... por isso, acho que há algo errado com privilégios. / var / www / html está no grupo www-data e seu dono também é www-data.

    
por sciakysystem 08.04.2015 / 18:12

1 resposta

2

Unir comandos com && significa que o comando à direita somente será executado se o da esquerda for bem-sucedido. Isso significa que seu crontab falhará na primeira vez em que for executado, já que não há arquivo zip em /var/www/html/ , então o rm /var/www/html/my-zip-file*.zip falhará e o mv não será executado.

Assim, você pode criar um arquivo com o nome correto que pode ser excluído e manter o mesmo comando cron:

touch /var/www/html/my-zip-file.zip

Você também pode usar ; em vez de && :

cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt && 
cd /home/myuser && 
zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt && 
rm file.txt && 
rm /var/www/html/my-zip-file*.zip ; 
mv my-zip-file*.zip /var/www/html && cd

Você também está tornando esse caminho mais complexo do que precisa ser. A cópia de /home/myuser/myworkingdir/file.txt to /home/myuser/file.txt é desnecessária, pois você só está usando isso para compactá-lo e excluí-lo. Os comandos cd não são necessários, você pode usar o caminho completo. Também não há razão para cd no final. Tudo o que você precisa é de um comando para remover quaisquer arquivos zip do diretório de destino e um comando para compactá-los:

rm /var/www/html/my-zip-file*.zip &&
 zip /var/www/htmlmy-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip /home/myuser/myworkingdir/file.txt
    
por terdon 09.04.2015 / 00:23