2017-12-29 38 views
1

내가 로그인 한 사용자의 홈 페이지에 폴더를 동기화 할 lsyncd를 구성하려고하지만 os.getenv("HOME") 그의 $HOME의 가치를 캡처 할 때 결과는 항상lsyncd.conf에서 getenv ("HOME")가 nil과 같은 이유는 무엇입니까? 준비

오류입니다은/etc/lsyncd/lsyncd.conf.lua : /etc/lsyncd/lsyncd.conf.lua : 14 : nil의 값을

을 연결하는 시도는 내가 os.getenv("PWD")을 시도하고 오류를 표시하지 않고 실행되지만 작동하지 않고 /var/log/lsyncd/lsyncd.status을에 파일 나는 PWD가 비어있는 것처럼 /.mozilla/firefox 주소를 사용하려고 시도합니다.

sudo -E service lsyncd restart 명령을 실행하고 sudoers를 Defaults env_keep +="HOME"으로 수정하여 환경 변수를 유지하려고했습니다. 모두 헛된 것이 었습니다.
아이디어가 있으십니까?

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

답변

1

리눅스는 "로그인 한 사용자"의 개념을 가지고 있지 않습니다

나는 내 코드를 묶습니다. 로그인 사용자의 개념을 가지고 있지만 동시에 여러 개가있을 수 있습니다.

systemd을 통해 시스템 서비스를 실행하고 있습니다. sudo을 사용하여 HOME 환경 변수를 보존하면 sudo -E service lsyncd restart을 실행하면 sudo을 호출 한 사용자의 홈 디렉토리에 HOME을 설정하고 service 명령을 실행합니다. 하지만 서비스에 대한 값은 HOME과 아무 관련이 없습니다. Systemd는 시작하기위한 관리 명령의 환경을 기반으로 서비스 환경을 설정하지 않으며 서비스 구성을 기반으로합니다.

특정 사용자의 파일을 동기화 할 경우

후 하드 코드는 사용자의 홈 디렉토리 경로 또는 사용자의 홈 디렉토리를 조회 getpwuid 또는 getpwnam를 사용합니다.

로그인 한 사용자의 파일을 동기화하려면 시스템 서비스를 사용하지 마십시오. 대신 lsyncd를 해당 사용자의 로그인 세션의 일부로 실행하십시오.

관련 문제