
Estou executando um servidor proxy reverso LAEMP no Arch na nuvem.
Tenho minha nextcloud/data
pasta montada em uma unidade de armazenamento conectada em /mnt/hdd/nextcloud/data
, vinculada a /srv/www/nextcloud/data
.
Se eu não fizer isso, mas mantiver nextcloud/data
o mesmo disco que o /
, não terei esse problema.
Em reboot
, o sistema inicia; As páginas PHP apresentam um erro, mas não httpd
mostram nginx
nenhum erro com systemctl status
. O erro está em php-fpm
.
Saída 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 está recebendo isso do systemd
drop-in /etc/systemd/system/php-fpm.service.d/override.conf
:
[Service]
...
ReadWritePaths=/srv/www/nextcloud/data
Quando executo systemctl restart php-fpm
, o erro desaparece para sempre até a próxima reinicialização.
Presumo que o php-fpm
serviço não consiga encontrar a nextcloud
pasta porque hdd/
não está montado quando php-fpm
é iniciado e deseja procurar em suas pastas da web. Eu acho que deveria de alguma forma ajustar os níveis de execução para php-fpm
e/ou (de preferência) quando /etc/fstab
carregar a unidade de armazenamento anexada para /mnt/hdd
.
/etc/fstab
monta a unidade /mnt/hdd
com esta instrução:
/dev/vdc1 /mnt/hdd ext4 defaults,noatime,nofail 0 0
Nada que procuro na Internet me diz como resolver esse problema. Tudo nos resultados da pesquisa mostra assuntos não relacionados sobre php-fpm
ou /etc/fstab
. Mesmo assim, na melhor das hipóteses eu receberia alguma resposta infantil.
Quero saber a maneira correta de vdc1
montar muito mais cedo no tempo de execução, ou pelo menos esperar php-fpm
até que o diretório esteja disponível antes de fazer um ajuste.
Responder1
Você pode configurar a unidade systemd para ser iniciada somente após as montagens, adicionando as seguintes opções de configuração ao arquivo existente ou adicionando outra se não quiser modificá-la:
[Unit]
After=local-fs.target
Outra opção seria adicionar a seguinte opção à definição de montagem no fstab:
x-systemd.required-by=php-fpm.service
Responder2
Enquantooutra respostaajudei por um tempo com uma declaração dentro /etc/fstab
, modificar o .service
arquivo acabou sendo minha solução mais confiável...
Nós precisamosalgumas declaraçõesna configuração do serviço, mas em [Unit]
, não [Service]
, algo como:
[Unit]
Requires=local-fs.target
After=local-fs.target
Mas, a questão é onde colocá-los e para que servem os valores Requires=
e After=
.
Precisamos de um serviçoconfiguração de substituição drop-in.
O serviço é php-fpm
, com seu arquivo de configuração original em /lib/systemd/system/php-fpm.service
. No entanto, a modificação disso não é persistente, pois é substituída por atualizações. Em vez disso, era necessário criar um arquivo de substituição, com qualquer nome e .conf
extensão /etc/systemd/system/php-fpm.service.d/
. Embora /etc/systemd/system/
já deva existir com muitas coisas, php-fpm.service.d/
pode ser necessário criar a subpasta.
Baseado em/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
Essecomando:
systemctl list-units --type=mount
retorna muitas linhas, incluindo estas:
mnt-hdd.mount loaded active mounted /mnt/hdd
mnt-ssd.mount loaded active mounted /mnt/ssd
que reconhecemos /etc/fstab
como /mnt/hdd
e /mnt/ssd
.
Então, precisamos deste arquivo:
/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