일시 중지 상태에서 다시 시작하면 스크립트에서 프로그램 실행

일시 중지 상태에서 다시 시작하면 스크립트에서 프로그램 실행

다음 내용이 포함된 /lib/systemd/system-sleep/파일 에 있는 스크립트를 사용하여 시스템을 절전 모드에서 다시 시작할 때 RealTimeSync 프로그램을 실행하려고 합니다 .RealTimeSync_kill_suspend.sh

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - $1: Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
esac

RealTimeSync_resume.sh다음 내용으로 하위 스크립트를 실행한다는 것을 알고 있습니다 .

#!/bin/sh

echo "$(date) - Running RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

/home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real &

echo "$(date) - RealTimeSync should be running" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

exit

echo스크립트 의 두 문 뒤의 줄 RealTimeSync_kill_suspend.sh과 하위 스크립트 echo의 두 문 뒤의 줄을 로그 파일에 삭제하기 때문입니다 .RealTimeSync_resume.shsuspend_resume.log

czw, 5 sie 2021, 16:55:50 CEST - pre: Killing RealTimeSync
czw, 5 sie 2021, 16:55:58 CEST - post: Invoking RealTimeSync resume script
czw, 5 sie 2021, 16:55:58 CEST - Running RealTimeSync
czw, 5 sie 2021, 16:56:28 CEST - RealTimeSync should be running

그러나 프로세스를 찾아보면 ps -aux | grep RealTimeSync적절한 일치 항목이 표시되지 않습니다.

bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

하위 스크립트를 실행하면 다음과 같은 sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh올바른 프로세스가 실행됩니다 ps -aux | grep RealTimeSync.

bart       31066  0.0  0.0    212    68 pts/0    S    17:37   0:00 /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
bart       31071  0.3  0.1 442428 41260 pts/0    Sl   17:37   0:00 /home/bart/Applications/FreeFileSync/Bin/RealTimeSync_x86_64 /home/bart/Documents/Documents_backup.ffs_real
bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

언급된 모든 파일에는 -rwxr-xr-x권한이 있습니다.

포럼에서 검색한 후 RealTimeSync에는 로그온 시 활성화되는 일부 서비스가 필요하지만 사용할 수 없다는 개념을 얻었습니다. 예를 들어 동기화 클라이언트를 시작하는 스크립트를 실행하는 데 문제가 있는 사람들은 연결하려면 X 서버가 필요합니다.

declare -x DISPLAY=":0.0"
declare -x XAUTHORITY="/home/<your user>/.Xauthority"
synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1

이 포럼 스레드에서:https://ubuntuforums.org/showthread.php?t=2380045

어떤 도움이라도 감사하겠습니다.

편집 1

"FreeFileSync 및 ReadTimeSync는 그래픽 X11 디스플레이에 액세스해야 하므로 시스템 모드를 통해 실행할 수 없습니다. 사용자 모드에서 systemd는 사용자 그래픽 세션에 대해 알고 이를 사용합니다." 따라서 잠재적인 두 가지 솔루션이 있습니다.

위에서 언급한 하드코딩 DISPLAYXAUTHORITY는 DISPLAY 값이 세션마다 다를 수 있으므로 사용하지 않는 것이 좋습니다.

또는 사용자에 대한 디스플레이가 초기화되므로 시스템 서비스가 아닌 사용자 서비스로 실행됩니다.

여기에서 FreeFileSync를 시스템 서비스로 실행하는 문제를 해결하는 방법을 찾았습니다.https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

안타깝게도 이러한 솔루션을 구현하는 데 문제가 있습니다. 도움을 주시면 감사하겠습니다.

편집 2

좋아, 해냈어! 이제 기본 스크립트에서 RealTimeSync를 실행합니다. 별 차이가 없을 것 같지만 중요한 것은 'DISPLAY'를 다음과 같이 초기화하는 것입니다.

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                env DISPLAY=:1 sudo -u bart /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
;;
esac

그리고 이 스크립트의 소유자를 루트로 설정합니다.chown root:root <script_name>

해결책은 여기에서 나왔습니다.로그인한 사용자(루트 아님)로 재개한 후 스크립트 시작

DISPLAY내가 이해하는 바에 따르면 하드코딩으로 인해 문제가 발생할 수 있지만 일시적으로 작동하므로 이는 적절한 해결 방법이라기보다는 오히려 다른 방법입니다 . 루트가 아닌 사용자로 이를 올바르게 실행하는 방법을 아는 사람이 있는 경우 힌트를 주시면 감사하겠습니다.

관련 정보