2017-12-29 53 views
1

Ich versuche lsyncd zu konfigurieren, um einen Ordner auf der Homepage des angemeldeten Benutzers zu synchronisieren, aber wenn ich versuche, den Wert seiner $HOME mit os.getenv("HOME") das Ergebnis zu erfassen immerWarum ist getenv ("HOME") in der lsyncd.conf gleich null?

Fehler vorbereiten/etc/lsyncd/lsyncd.conf.lua: /etc/lsyncd/lsyncd.conf.lua: 14: Versuch, einen Null-Wert zu verketten

versuchte ich os.getenv("PWD") und es läuft ohne Fehler angezeigt wird, aber es funktioniert nicht und in den /var/log/lsyncd/lsyncd.status Datei Ich sehe, dass es versucht, die /.mozilla/firefox Adresse zu verwenden, als ob PWD leer wäre.

Ich habe versucht, die Umgebungsvariablen zu halten, indem Sie den Befehl sudo -E service lsyncd restart ausführen und sudoers mit Defaults env_keep +="HOME" ändern, alles vergebens.
Irgendwelche Ideen?

Ich lege meinen Code:

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, 
} 

Antwort

1

Linux hat kein Konzept „der angemeldeten Benutzer“. Es hat ein Konzept von ein angemeldeter Benutzer, aber es kann viele von ihnen gleichzeitig sein.

Sie führen einen Systemdienst durch systemd. Die Angabe sudo zum Beibehalten der HOME Umgebungsvariable bedeutet, dass der Befehl mit HOME auf das Ausgangsverzeichnis des Benutzers ausgeführt wird, der sudo aufgerufen hat, wenn Sie sudo -E service lsyncd restart ausführen. Aber das hat nichts mit dem Wert von HOME für den Dienst zu tun. Systemd legt die Umgebung eines Dienstes nicht basierend auf der Umgebung des Verwaltungsbefehls fest, um sie zu starten. Sie basieren auf der Dienstkonfiguration.

Wenn Sie eines bestimmten Benutzers Dateien zu synchronisieren, dann ist der Weg hart Code zur Seite des Home-Verzeichnis des Benutzers, oder verwenden Sie getpwuid oder getpwnam das Home-Verzeichnis eines Benutzers zu suchen.

Wenn Sie die Dateien des jeweils angemeldeten Benutzers synchronisieren möchten, verwenden Sie keinen Systemdienst. Führen Sie stattdessen lsyncd als Teil der Anmeldesitzung dieses Benutzers aus.