PHP-FPM は、Web フォルダが /etc/fstab にマウントされる前に起動し、エラーをスローします。

PHP-FPM は、Web フォルダが /etc/fstab にマウントされる前に起動し、エラーをスローします。

クラウド内の Arch で LAEMP リバース プロキシ サーバーを実行しています。

フォルダーnextcloud/dataは の接続されたストレージ ドライブにマウントされ/mnt/hdd/nextcloud/data、 にリンクされています/srv/www/nextcloud/data

これを行わずに、 とnextcloud/data同じディスクに保存しておけば/、この問題はまったく発生しません。

reboot、システムが起動します。PHP ページではエラーが発生しますが、 では、にも にもエラーは表示されませhttpdん。エラーは にあります。nginxsystemctl statusphp-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.

systemdNextcloud はドロップインからこれを取得します/etc/systemd/system/php-fpm.service.d/override.conf:

[Service]
...
ReadWritePaths=/srv/www/nextcloud/data

を実行するとsystemctl restart php-fpm、次の再起動までエラーは永久に消えます。

サービスは、起動時に がマウントされておらず、Web フォルダ内を検索しようとしているため、フォルダphp-fpmを見つけられないと推測します。が接続されたストレージ ドライブを にロードするときに、 および/または (できれば) の実行レベルを何らかの方法で調整する必要があると思います。nextcloudhdd/php-fpmphp-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

関連情報