我正在运行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