Создайте zip-файлы в / var / www / html с помощью crontabs

Как объясняет заголовок, мне нужно было взять файл и поместить его в zip-архив один раз в день; Кроме того, zip-файл необходимо переместить в / var / www / html, где сценарии .php позволяют пользователям загружать его.

Предполагая, что:

  • абсолютный путь к файлу равен /home/myuser/working-directory/file.txt
  • Я поместил файл всех сценариев, которые мне нужно запустить, используя cronjobs в /usr/scripts
  • Я запрограммировал следующий cronjob, используя sudo crontab -e вместо crontab -e, потому что / var / www / html нужны административные привилегии

Результаты моих мыслей следующие:

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

Ну ... это не работает. Я думаю, что проблема связана с привилегиями, потому что я скопировал file.txt в /home/myuser, а также был создан zip. Но тогда я не могу переместить zip в /var/www/html, даже если crontab работает с правами Root.

Есть идеи?

Кроме того, поскольку .zip создается один раз в день, мне нужно удалить предыдущий .zip из / var / www / html, прежде чем перемещать туда новый. Я попытался использовать

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

(проверьте выше файл create-zip.sh), но он тоже не работает ... поэтому я думаю, что с привилегиями что-то не так. / var / www / html входит в группу www-data, и ее владельцем также является www-data.

3
задан 9 April 2015 в 06:03

1 ответ

Присоединение к командам с && средства, которые справа только выполнит команда, если тот слева был успешен. Это означает, что Ваш crontab перестанет работать в первый раз, когда он выполняется, так как нет никакого zip-файла в /var/www/html/ так rm /var/www/html/my-zip-file*.zip сбои и mv не будет выполняться.

Так, можно или создать файл правильного имени, которое может быть удалено и сохранить ту же команду крона:

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

Или, можно использовать ; вместо &&:

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

Вы также делаете этот путь более сложным, чем это должно быть. Копирование /home/myuser/myworkingdir/file.txt кому: /home/myuser/file.txt является ненужным, так как Вы только используете это для архивирования его и затем удаляете его. cd команды не нужны, можно использовать полный путь. Нет также никакой причины для cd в конце. Все, в чем Вы нуждаетесь, является одной командой для удаления любых zip-файлов из целевого каталога и одной команды для архивирования их:

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
2
ответ дан 9 April 2015 в 06:03

Другие вопросы по тегам:

Похожие вопросы: