Как объясняет заголовок, мне нужно было взять файл и поместить его в zip-архив один раз в день; Кроме того, zip-файл необходимо переместить в / var / www / html, где сценарии .php позволяют пользователям загружать его.
Предполагая, что:
/home/myuser/working-directory/file.txt
/usr/scripts
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.
Присоединение к командам с &&
средства, которые справа только выполнит команда, если тот слева был успешен. Это означает, что Ваш 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