Centos 7 시스템에 incron을 설치했습니다.
초기 테스트를 위해 테이블에 간단한 항목이 있습니다. 파일이 대상 폴더로 이동되면 스크립트가 실행됩니다. 내가 가장 먼저 한 일은 실행이었다.
/dir IN_MOVED_TO logger success
하지만 이것은 작동하지 않습니다. 파일을 대상 폴더에 넣으면 /var/logs/messages에 다음과 같은 메시지가 표시됩니다.
Aug 14 23:29:27 Clone-Dev-AnalyticsAutomation gnome-session: gnome-session-binary[2329]: WARNING: Unable to inhibit system: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Permission denied
Aug 14 23:29:32 Clone-Dev-AnalyticsAutomation journal: unable to create file '/run/user/1018/dconf/user': Permission denied. dconf will not work properly.
sudo 명령 없이 incrond가 시작된 줄 알고 sudo 명령으로 다시 시작했지만 여전히 동일한 결과를 얻습니다.
나는 달렸다서비스 incrond 상태 -l
Aug 14 23:13:48 Clone-Dev incrond[6875]: loading user tables
Aug 14 23:13:48 Clone-Dev incrond[6875]: loading table for user simon
Aug 14 23:13:49 Clone-Dev incrond[6875]: loading table for user analytics
Aug 14 23:13:49 Clone-Dev incrond[6875]: loading table for user root
Aug 14 23:13:49 Clone-Dev incrond[6875]: access denied on ## - events will be discarded silently
Aug 14 23:13:49 Clone-Dev incrond[6875]: cannot create watch for user root: (22) Invalid argument
Aug 14 23:13:49 Clone-Dev incrond[6875]: access denied on ## - events will be discarded silently
Aug 14 23:13:49 Clone-Dev incrond[6875]: cannot create watch for user root: (22) Invalid argument
Aug 14 23:13:49 Clone-Dev incrond[6875]: ready to process filesystem events
무슨 일이 일어났는지 잘 모르겠습니다. incrond가 명령을 실행하려고 하지만 필요한 권한이 없는 것 같습니다.
답변1
문제는 이를 실행하는 서비스나 사용자에 있는 것이 아닙니다. 이 디렉터리의 권한을 변경하십시오.
chmod 644 /run/user/1018/dconf/user
또는 상위 디렉토리의 경우. 다른 사용자가 실행하는 경우에는 777도 작동합니다.
사용 중인 프로세스(이 경우 gnome-session - 내 추측으로는 GDBus임)에 명시적인 GUI가 있는 경우 dconf/user에서 어떤 프로세스가 dir 명령(incron에서)과 충돌하는지 확인하세요. 그에 따라 권한을 비활성화하거나 프로세스를 거부하도록 선택합니다.
$>pidof dconf*
$>disown --pid=<PID of conflicting process>
서비스를 루트로 실행할 필요는 없습니다. 이는 프로세스를 실행하는 gnome 세션 GUI와 충돌할 가능성이 높습니다. 편집 - /etc/incron.allow의 사용자가 incron을 실행할 수 있도록 허용합니다.
인크론 설정과 같은 간단한 bash는 다음과 같습니다.
if[ IN_CREATE_DIR /run/user/1018/dconf/user ]
then
set /dir moved
mailx -r "server" -s "dir moved" [email protected]
fi
/dir IN_MOVED_FROM /log success
실행하는 것만으로도 충분할 것 같지만 그렇지 않다고 생각합니다.