
我正在雲端中的 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 正在從systemd
drop-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/fstab
as/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