Ausführen eines Programms aus einem Skript nach der Wiederaufnahme aus dem Ruhezustand

Ausführen eines Programms aus einem Skript nach der Wiederaufnahme aus dem Ruhezustand

Ich versuche, das Programm RealTimeSync beim Reaktivieren des Systems aus dem Ruhezustand mithilfe eines Skripts auszuführen, das sich in einer /lib/systemd/system-sleep/Datei RealTimeSync_kill_suspend.shmit folgendem Inhalt befindet:

#!/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

Ich weiß, dass es ein Unterskript RealTimeSync_resume.shmit folgendem Inhalt ausführt:

#!/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

da es Zeilen nach beiden echoAnweisungen im RealTimeSync_kill_suspend.shSkript und Zeilen nach beiden echoAnweisungen im RealTimeSync_resume.shUnterskript in eine Protokolldatei löscht suspend_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

Aber wenn ich nach dem Prozess suche, ps -aux | grep RealTimeSyncwird keine richtige Übereinstimmung angezeigt, nur:

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

Wenn ich das Unterskript mit ausführe, sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.shwird der korrekte Prozess mit folgendem ausgeführt 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

Alle genannten Dateien haben -rwxr-xr-xBerechtigungen.

Nach einer Suche in Foren kam ich auf die Idee, dass RealTimeSync einen Dienst benötigt, der bei der Anmeldung aktiviert wird und nicht verfügbar ist. Beispielsweise benötigten Leute, die Probleme mit der Ausführung von Skripten beim Starten von Synclients hatten, einen X-Server für die Verbindung:

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

aus diesem Forenthread:https://ubuntuforums.org/showthread.php?t=2380045

Ich wäre für jede Hilfe dankbar.

BEARBEITEN 1

Ich habe festgestellt, dass „FreeFileSync und ReadTimeSync Zugriff auf die grafische X11-Anzeige benötigen, sodass sie nicht im Systemmodus ausgeführt werden können. Im Benutzermodus kennt systemd die grafische Benutzersitzung und verwendet sie.“ Es gibt also zwei mögliche Lösungen:

Von einer der oben genannten Methoden, Festcodierung DISPLAYund XAUTHORITYwird abgeraten, da der Anzeigewert von Sitzung zu Sitzung unterschiedlich sein kann.

Oder als Benutzerdienst und nicht als Systemdienst ausgeführt, da die Anzeige für den Benutzer initialisiert wird.

Folgendes habe ich bei der Fehlerbehebung bei der Ausführung von FreeFileSync als Systemdienst gefunden:https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

Leider habe ich Probleme bei der Umsetzung dieser Lösungen, ich bin für jede Hilfe dankbar.

BEARBEITEN 2

Ok, ich habe es geschafft! Ich führe RealTimeSync jetzt vom Hauptskript aus aus, obwohl ich denke, dass das keinen Unterschied macht. Wichtig ist, 'DISPLAY' wie folgt zu initialisieren:

#!/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

Und legen Sie den Besitzer dieses Skripts auf „Root“ fest:chown root:root <script_name>

Die Lösung war von hier:Skript nach Fortsetzen als angemeldeter Benutzer (nicht Root) starten

So wie ich das verstehe, ist das eher ein Umweg als eine richtige Lösung, da Hardcoding DISPLAYProbleme bereiten könnte, aber es funktioniert vorübergehend. Falls jemand weiß, wie man das als Benutzer (nicht als Root) richtig ausführt, wäre ich für jeden Hinweis dankbar.

verwandte Informationen