#php #laravel #backup #tar #archlinux
#php #ларавель #резервная копия #смола #archlinux
Вопрос:
Я пытаюсь реализовать простую функцию резервного копирования некоторых каталогов (в основном каталогов в /etc), которая обрабатывается laravel. В основном я храню архивы .tar, содержащие определенные файлы каталогов.
Эта команда используется для создания архива резервной копии одного каталога:
shell_exec("cd {$backupPath} amp;amp; tar -cf {$dirName}.tar -P {$fullPathToDir}")
Это команда для восстановления каталога из архива резервной копии:
shell_exec("cd / amp;amp; sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first")
По причинам тестирования я разрешил запускать http-пользователя sudo tar
, однако моей первоначальной идеей было создать скрипт bash, который будет обрабатывать это, и добавить его в sudoers. Запуск команды или сценария оболочки приводит к тем же ошибкам.
Проблема в том, что если я запускаю его через php, я получаю такие ошибки:
Cannot unlink: Read-only file system
Но, если я запущу его из командной строки, он будет работать:
su http -s /bin/bash -c "cd / amp;amp; sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first"
Запуск этого как в полной системе archlinux, так и в контейнере докеров archlinux дает мне одинаковые результаты. Я был бы признателен за любую помощь.
Комментарии:
1. php запускается как www-данные:www-данные(я думаю), которые не являются владельцами файловой системы. Необходимо изменить права доступа к файлу
Ответ №1:
Таким образом, проблема была с блоком systemd для php-fpm 7.4, где ProtectSystem было установлено значение true, после того, как он прокомментировал это, все работало так, как ожидалось.
sed -i 's:ProtectSystem=full:#ProtectSystem=full:' /usr/lib/systemd/system/php-fpm7.service