我正在尝试配置 lsyncd 以同步已登录用户主页上的文件夹,但是当我尝试使用 os.getenv("HOME ")
结果总是
Error prepare /etc/lsyncd/lsyncd.conf.lua: /etc/lsyncd/lsyncd.conf.lua: 14: attempt to concatenate a nil value
我尝试了 os.getenv("PWD")
并且它运行时没有显示错误但是它不起作用并且在 /var/log/lsyncd/lsyncd.status
文件,我看到它试图使用 /.mozilla/firefox
地址,就好像 PWD 是空的一样。
我试图通过运行命令 sudo -E service lsyncd restart
并使用 Defaults env_keep +="HOME"
修改 sudoers 来保留环境变量,但都是徒劳的。
有任何想法吗?
附上我的代码:
settings{
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
}
sync{
default.rsync,
source = os.getenv("HOME").."/.mozilla/firefox/",
target = "tmp/.mozilla/firefox/",
delay = 1,
}
最佳答案
Linux 没有“登录用户”的概念。它有一个一个登录用户的概念,但可以同时有很多用户。
您正在通过 systemd 运行系统服务.告诉 sudo
保留 HOME
环境变量意味着当您运行 sudo -E service lsyncd restart
时,service
命令运行时 HOME
设置为调用 sudo
的用户的主目录。但这与服务的 HOME
值无关。 Systemd 不会根据启动它的管理命令的环境来设置服务的环境,它们是基于服务配置。
如果要同步特定用户的文件,则硬编码到该用户主目录的路径,或使用 getpwuid
或 getpwnam
查找用户的主目录。
如果要同步任何登录用户的文件,请不要使用系统服务。相反,运行 lsyncd 作为该用户登录 session 的一部分。
关于linux - 为什么 getenv ("HOME") 在 lsyncd.conf 中等于 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023349/