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也不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.

Nextcloud 正在從systemddrop-in取得此資訊/etc/systemd/system/php-fpm.service.d/override.conf

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

當我運行時systemctl restart php-fpm,錯誤將永遠消失,直到下次重新啟動。

我認為該php-fpm服務無法找到該nextcloud資料夾,因為啟動hdd/時未安裝php-fpm並且想要查看其 Web 資料夾。我認為我應該以某種方式調整運行級別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], not下[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

相關內容