
Я использую обратный прокси-сервер LAEMP на Arch в облаке.
Моя nextcloud/data
папка подключена к подключенному накопителю по адресу /mnt/hdd/nextcloud/data
, связанному с /srv/www/nextcloud/data
.
Если я этого не сделаю, а оставлю nextcloud/data
на том же диске, что и /
, то у меня вообще не возникнет этой проблемы.
В reboot
, система запускается; PHP-страницы получают ошибку, но ни , httpd
ни не nginx
показывают никаких ошибок с systemctl status
. Ошибка в php-fpm
.
Вывод systemctl status php-fpm
:
× php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
Drop-In: /etc/systemd/system/php-fpm.service.d
└─override.conf
Active: failed (Result: exit-code) since Tue 2023-05-30 16:47:30 PDT; 14s ago
Process: 316 ExecStart=/usr/bin/php-fpm --nodaemonize --fpm-config /etc/php/php-fpm.conf (code=exited, status=226/NAMESPACE)
Main PID: 316 (code=exited, status=226/NAMESPACE)
CPU: 8ms
May 30 16:47:29 MY_HOST systemd[1]: Starting The PHP FastCGI Process Manager...
May 30 16:47:29 MY_HOST (php-fpm)[316]: php-fpm.service: Failed to set up mount namespacing: /run/systemd/unit-root/mnt/hdd/nextcloud/data: No such file or directory
May 30 16:47:29 MY_HOST (php-fpm)[316]: php-fpm.service: Failed at step NAMESPACE spawning /usr/bin/php-fpm: No such file or directory
May 30 16:47:30 MY_HOST systemd[1]: php-fpm.service: Main process exited, code=exited, status=226/NAMESPACE
May 30 16:47:30 MY_HOST systemd[1]: php-fpm.service: Failed with result 'exit-code'.
May 30 16:47:30 MY_HOST systemd[1]: Failed to start The PHP FastCGI Process Manager.
Nextcloud получает это из systemd
drop-in /etc/systemd/system/php-fpm.service.d/override.conf
:
[Service]
...
ReadWritePaths=/srv/www/nextcloud/data
Когда я запускаю systemctl restart php-fpm
, ошибка исчезает навсегда до следующей перезагрузки.
Я предполагаю, что php-fpm
служба не может найти nextcloud
папку, потому что hdd/
не монтируется при php-fpm
запуске и хочет искать в своих веб-папках. Я думаю, что мне следует как-то настроить уровни запуска для php-fpm
и/или (предпочтительно) при /etc/fstab
загрузке подключенного накопителя в /mnt/hdd
.
/etc/fstab
монтирует диск /mnt/hdd
с помощью следующей инструкции:
/dev/vdc1 /mnt/hdd ext4 defaults,noatime,nofail 0 0
Ничто из того, что я ищу в Интернете, не говорит мне, как решить эту проблему. Все в результатах поиска показывает не имеющие отношения к делу вопросы о php-fpm
или /etc/fstab
. Даже тогда, в лучшем случае я бы получил какой-нибудь ответ script kiddy.
Я хочу знать, как правильно выполнить vdc1
монтирование гораздо раньше во время выполнения или, по крайней мере, дождаться php-fpm
, пока каталог станет доступен, прежде чем устраивать истерику.
решение1
Вы можете настроить модуль systemd так, чтобы он запускался только после монтирования, добавив следующие параметры конфигурации либо в существующий файл перетаскивания, либо добавив другой, если вы не хотите его изменять:
[Unit]
After=local-fs.target
Другим вариантом было бы добавить следующую опцию в определение монтирования в fstab:
x-systemd.required-by=php-fpm.service
решение2
Покадругой ответНа какое-то время мне помогло заявление внутри /etc/fstab
, но изменение .service
файла оказалось для меня более надежным решением...
Нам нужнонекоторые заявленияв конфигурации сервиса, но под [Unit]
, а не [Service]
, что-то вроде:
[Unit]
Requires=local-fs.target
After=local-fs.target
Но вопрос в том, где их разместить и какими должны быть значения Requires=
и After=
.
Нам нужна услугапереопределение конфигурации вставки.
Служба — php-fpm
, с ее исходным файлом конфигурации в /lib/systemd/system/php-fpm.service
. Однако изменение этого не является постоянным, поскольку оно заменяется обновлениями. Вместо этого необходимо создать файл переопределения с любым именем и расширением .conf
в /etc/systemd/system/php-fpm.service.d/
. Хотя /etc/systemd/system/
он уже должен существовать со многими вещами в нем, php-fpm.service.d/
может потребоваться создать подпапку.
На основе/etc/fstab:
UUID=long-uuid-serial-c0de1 /mnt/ssd ext4 defaults,noatime,nofail,x-systemd.required-by=php-fpm.service 0 0
UUID=long-uuid-serial-c0de2 /mnt/hdd ext4 defaults,noatime,nofail,x-systemd.required-by=php-fpm.service 0 0
Этоткоманда:
systemctl list-units --type=mount
возвращает много строк, включая эти:
mnt-hdd.mount loaded active mounted /mnt/hdd
mnt-ssd.mount loaded active mounted /mnt/ssd
которые мы узнаем из /etc/fstab
как /mnt/hdd
и /mnt/ssd
.
Итак, нам нужен этот файл:
/etc/systemd/system/php-fpm.service.d/mount.conf:
[Unit]
Requires=mnt-hdd.mount
After=mnt-hdd.mount
Requires=mnt-ssd.mount
After=mnt-ssd.mount