
Ich betreibe einen LAEMP-Reverse-Proxy-Server auf Arch in der Cloud.
Ich habe meinen nextcloud/data
Ordner auf einem angeschlossenen Speicherlaufwerk unter gemountet /mnt/hdd/nextcloud/data
und mit verknüpft /srv/www/nextcloud/data
.
Wenn ich dies nicht tue, sondern es nextcloud/data
auf derselben Festplatte belasse wie /
, habe ich dieses Problem überhaupt nicht.
Bei reboot
startet das System; PHP-Seiten erhalten einen Fehler, aber weder httpd
noch nginx
zeigen Fehler mit an systemctl status
. Der Fehler liegt in php-fpm
.
Ausgabe von 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 erhält dies vom systemd
Drop-In /etc/systemd/system/php-fpm.service.d/override.conf
:
[Service]
...
ReadWritePaths=/srv/www/nextcloud/data
Wenn ich ausführe systemctl restart php-fpm
, verschwindet der Fehler dauerhaft bis zum nächsten Neustart.
Ich gehe davon aus, dass der Dienst den Ordner php-fpm
nicht finden kann, weil er beim Start nicht gemountet ist und in seinen Webordnern suchen möchte. Ich würde denken, dass ich die Ausführungsebenen für und/oder (vorzugsweise) beim Laden des angeschlossenen Speicherlaufwerks irgendwie anpassen sollte .nextcloud
hdd/
php-fpm
php-fpm
/etc/fstab
/mnt/hdd
/etc/fstab
mountet das Laufwerk /mnt/hdd
mit dieser Anweisung:
/dev/vdc1 /mnt/hdd ext4 defaults,noatime,nofail 0 0
Nichts, wonach ich im Internet suche, sagt mir, wie ich dieses Problem lösen kann. Alles in den Suchergebnissen zeigt irrelevante Themen zu php-fpm
oder /etc/fstab
. Und selbst dann bekomme ich bestenfalls eine Script-Kiddy-Antwort.
Ich möchte wissen, wie ich vdc1
das Mounten zur Laufzeit richtig viel früher durchführen kann oder dass ich zumindest php-fpm
warten kann, bis das Verzeichnis verfügbar ist, bevor ich einen Anfall bekomme.
Antwort1
Sie können die systemd-Einheit so konfigurieren, dass sie erst nach dem Mounten gestartet wird, indem Sie entweder der vorhandenen Drop-In-Datei die folgenden Konfigurationsoptionen hinzufügen oder, wenn Sie sie nicht ändern möchten, eine weitere hinzufügen:
[Unit]
After=local-fs.target
Eine andere Möglichkeit wäre, der Mount-Definition in fstab die folgende Option hinzuzufügen:
x-systemd.required-by=php-fpm.service
Antwort2
Währendeine andere Antworthat eine Zeit lang mit einer darin enthaltenen Anweisung geholfen /etc/fstab
, das Ändern der .service
Datei war am Ende meine zuverlässigere Lösung ...
Wir braucheneinige Aussagenin der Servicekonfiguration, aber unter [Unit]
, nicht [Service]
, ungefähr so:
[Unit]
Requires=local-fs.target
After=local-fs.target
Die Frage ist jedoch, wo sie platziert werden sollen und welche Werte für Requires=
und gelten sollen After=
.
Wir brauchen einen ServiceDrop-In-Override-Konfiguration.
Der Dienst ist php-fpm
, mit seiner ursprünglichen Konfigurationsdatei unter /lib/systemd/system/php-fpm.service
. Änderungen daran sind jedoch nicht dauerhaft, da sie durch Upgrades ersetzt werden. Stattdessen muss eine Override-Datei mit einem beliebigen Namen und der .conf
Erweiterung in erstellt werden /etc/systemd/system/php-fpm.service.d/
. Obwohl /etc/systemd/system/
bereits viele Dinge darin vorhanden sein sollten, php-fpm.service.d/
muss der Unterordner möglicherweise erstellt werden.
Bezogen auf/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
DasBefehl:
systemctl list-units --type=mount
gibt viele Zeilen zurück, darunter diese:
mnt-hdd.mount loaded active mounted /mnt/hdd
mnt-ssd.mount loaded active mounted /mnt/ssd
was wir an /etc/fstab
und /mnt/hdd
erkennen /mnt/ssd
.
Also brauchen wir diese Datei:
/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