PHP-FPM se inicia antes de que la carpeta web se monte en /etc/fstab y arroja un error

PHP-FPM se inicia antes de que la carpeta web se monte en /etc/fstab y arroja un error

Estoy ejecutando un servidor proxy inverso LAEMP en Arch en la nube.

Tengo mi nextcloud/datacarpeta 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/datael 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 httpdmuestran nginxningú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 systemdel 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-fpmservicio no puede encontrar la nextcloudcarpeta porque hdd/no está montada cuando php-fpmse inicia y quiere buscar en sus carpetas web. Pensaría que de alguna manera debería ajustar los niveles de ejecución php-fpmy/o (preferiblemente) cuando /etc/fstabse carga la unidad de almacenamiento adjunta /mnt/hdd.

/etc/fstabmonta la unidad /mnt/hddcon 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-fpmo /etc/fstab. Incluso entonces, en el mejor de los casos obtendría alguna respuesta infantil.

Quiero saber la forma correcta de montarlo vdc1mucho antes en tiempo de ejecución, o al menos esperar php-fpmhasta 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 .servicearchivo 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 .confextensió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/fstabcomo /mnt/hddy /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

información relacionada