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

标签 linux ubuntu lua lsyncd

我正在尝试配置 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/

相关文章:

Linux 排序 - 求助

ubuntu - Davmail - java.library.path 中没有 jfxwebkit

amazon-web-services - EC2 Ubuntu 实例 - 未 protected 私钥文件

ubuntu - 降级 map 服务器

lua - 运行 Torch/Lua 时出错,可能是安装错误

linux - 如何更改同步目标

c - BoehmGC - 了解内存分配器 GC_malloc

c++ - 将表从一个 lua 状态传递到另一个

c++ - OpenNI: "Open failed: Device is in safe mode. Cannot start any stream!"

c++ - 将 Lua 嵌入 C++