웹 폴더가 /etc/fstab에 마운트되기 전에 PHP-FPM이 시작되고 오류가 발생합니다.

웹 폴더가 /etc/fstab에 마운트되기 전에 PHP-FPM이 시작되고 오류가 발생합니다.

저는 클라우드의 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다음에 재부팅할 때까지 오류가 영원히 사라집니다.

서비스가 시작될 때 마운트되지 않았고 웹 폴더를 보길 원하기 때문에 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

기존 드롭인 파일에 다음 구성 옵션을 추가하거나 수정하지 않으려면 다른 옵션을 추가하여 마운트 후에만 시스템 장치가 시작되도록 구성할 수 있습니다.

[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/fstabas /mnt/hdd와 에서 인식합니다 /mnt/ssd.

따라서 다음 파일이 필요합니다.

/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

관련 정보