
Estoy ejecutando un servidor proxy inverso LAEMP en Arch en la nube.
Tengo mi nextcloud/data
carpeta montada en una unidad de almacenamiento adjunta en /mnt/hdd/nextcloud/data
, vinculada a /srv/www/nextcloud/data
.
Si no hago esto, pero mantengo nextcloud/data
el mismo disco que /
, entonces no tengo este problema en absoluto.
En reboot
, el sistema se inicia; Las páginas PHP obtienen un error, pero ni httpd
muestran nginx
ningún error con systemctl status
. El error está en php-fpm
.
Salida de 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 obtiene esto desde systemd
el acceso directo /etc/systemd/system/php-fpm.service.d/override.conf
:
[Service]
...
ReadWritePaths=/srv/www/nextcloud/data
Cuando ejecuto systemctl restart php-fpm
, el error desaparece para siempre hasta el próximo reinicio.
Supongo que el php-fpm
servicio no puede encontrar la nextcloud
carpeta porque hdd/
no está montada cuando php-fpm
se inicia y quiere buscar en sus carpetas web. Pensaría que de alguna manera debería ajustar los niveles de ejecución php-fpm
y/o (preferiblemente) cuando /etc/fstab
se carga la unidad de almacenamiento adjunta /mnt/hdd
.
/etc/fstab
monta la unidad /mnt/hdd
con esta declaración:
/dev/vdc1 /mnt/hdd ext4 defaults,noatime,nofail 0 0
Nada de lo que busco en Internet me dice cómo resolver este problema. Todo en los resultados de la búsqueda muestra asuntos no relacionados sobre php-fpm
o /etc/fstab
. Incluso entonces, en el mejor de los casos obtendría alguna respuesta infantil.
Quiero saber la forma correcta de montarlo vdc1
mucho antes en tiempo de ejecución, o al menos esperar php-fpm
hasta que el directorio esté disponible antes de realizar un ajuste.
Respuesta1
Puede configurar la unidad systemd para que se inicie solo después de los montajes agregando las siguientes opciones de configuración al archivo desplegable existente o agregando otra si no desea modificarla:
[Unit]
After=local-fs.target
Otra opción sería agregar la siguiente opción a la definición de montaje en fstab:
x-systemd.required-by=php-fpm.service
Respuesta2
Mientrasotra respuestaAyudé por un tiempo con una declaración dentro /etc/fstab
, modificar el .service
archivo terminó siendo mi solución más confiable...
Nosotros necesitamosalgunas declaracionesen la configuración del servicio, pero debajo [Unit]
, no [Service]
, algo así como:
[Unit]
Requires=local-fs.target
After=local-fs.target
Pero la pregunta es dónde colocarlos y cuáles deberían ser los valores para Requires=
y After=
.
Necesitamos un servicioconfiguración de anulación directa.
El servicio es php-fpm
, con su archivo de configuración original en /lib/systemd/system/php-fpm.service
. Sin embargo, modificarlo no es persistente ya que se reemplaza por actualizaciones. En su lugar, era necesario crear un archivo de anulación, con cualquier nombre y .conf
extensión en /etc/systemd/system/php-fpm.service.d/
. Si bien /etc/systemd/system/
ya debería existir con muchas cosas en ella, php-fpm.service.d/
es posible que sea necesario crear la subcarpeta.
Residencia en/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
Estedominio:
systemctl list-units --type=mount
devuelve muchas líneas, incluidas estas:
mnt-hdd.mount loaded active mounted /mnt/hdd
mnt-ssd.mount loaded active mounted /mnt/ssd
que reconocemos de /etc/fstab
como /mnt/hdd
y /mnt/ssd
.
Entonces, necesitamos este archivo:
/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