
クラウド内の Arch で LAEMP リバース プロキシ サーバーを実行しています。
フォルダー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.
systemd
Nextcloud はドロップインからこれを取得します/etc/systemd/system/php-fpm.service.d/override.conf
:
[Service]
...
ReadWritePaths=/srv/www/nextcloud/data
を実行するとsystemctl restart php-fpm
、次の再起動までエラーは永久に消えます。
サービスは、起動時に がマウントされておらず、Web フォルダ内を検索しようとしているため、フォルダ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
。それでも、せいぜいスクリプト キディの回答が得られる程度です。
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
。
したがって、次のファイルが必要です:
マウント:
[Unit]
Requires=mnt-hdd.mount
After=mnt-hdd.mount
Requires=mnt-ssd.mount
After=mnt-ssd.mount