
我正在運行archlinux
並使用 systemdtransmission.service
下載種子。我有一個自動安裝的ext4
硬碟分割區。我將所有已完成的下載保存在那裡,並與本地網路上的 samba 伺服器共用該目錄。fstab
/var/lib/transmission
問題是,每次電腦啟動時,我都可以看到/var/lib/transmission
每個人都沒有讀取權限。這意味著 samba 伺服器無法讀取該目錄的完整路徑,最終我無法使用 samba 用戶端存取這些檔案。啟動後我可以運行sudo chmod a+rX /var/lib/transmission
,只有這樣才能存取該目錄。似乎每次啟動都會transmission
重寫權限。drwxr-x---
有沒有一種優雅的方法來編輯一些 systemd 檔案並修復它?也許使用sudo systemctl edit transmission.service
?
答案1
解決方案是添加/etc/systemd/system/multi-user.target.wants/transmission.service
以下內容或者使用sudo systemctl edit transmission.service
並編寫:
[Service]
ExecStartPost=/bin/chmod a+rX /var/lib/transmission
systemctl edit
開啟一個文字編輯器,供您覆蓋原始服務文件的條目,而不更改套件管理器提供的原始文件。
添加這些後,重新啟動並解決問題。
筆記:可能會更多務實使用,
systemctl edit
因為我猜這個命令是創建的,所以你不會編輯套件管理器提供的原始服務文件。筆記:
chmod
您可能需要根據您的分發路徑調整可執行檔案的路徑。
編輯:
與 中的目錄非常相似/var/run
,我發現了為什麼 systemd 確保每次啟動該目錄都將具有這些權限,最初的解釋如下:https://serverfault.com/questions/824393/var-run-directory-creation-even-though-service-is-disabled/824394#824394
引用:
對於 systemd,有一個名為 的新功能
tmpfiles.d(5)
,可用於在啟動時在.service
檔案之外建立檔案或目錄。Openvpn
並且ejabberd
都使用這個,所以這就是為什麼目錄/var/run
仍然被創建,即使它們沒有在啟動時啟動。tmpfiles 設定檔儲存在
/usr/lib/tmpfiles.d/
無論如何,解決此問題的另一種方法是將 umask 編號編輯為/usr/lib/tmpfiles.d/transmission.conf
如下所示:
d /var/lib/transmission 0755 transmission transmission