gpt4 book ai didi

linux - 为什么 getenv ("HOME") 在 lsyncd.conf 中等于 nil?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:49 29 4
gpt4 key购买 nike

我正在尝试配置 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 不会根据启动它的管理命令的环境来设置服务的环境,它们是基于服务配置。

如果要同步特定用户的文件,则硬编码到该用户主目录的路径,或使用 getpwuidgetpwnam查找用户的主目录。

如果要同步任何登录用户的文件,请不要使用系统服务。相反,运行 lsyncd 作为该用户登录 session 的一部分。

关于linux - 为什么 getenv ("HOME") 在 lsyncd.conf 中等于 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com