staging.inyokaproject.org

Bash: Skriptabarbeitung anzeigen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

pegu

Anmeldungsdatum:
2. September 2020

Beiträge: 66

Guten Morgen zusammen,

in einem anderen Beitrag wurde mir geholfen, ein Skript zeitgesteuert zu starten.

Hierzu habe ich eine Unit vom Typ Service erstellt.

Der Inhalt der Unit lautet:

# /etc/systemd/system/backup_linux.service
[Unit]
Description=backup_linux_aufruf

[Service]
User=MEIN-NAME
ExecStart= /home/MEIN-NAME/Dokumente/backup_linux

Soweit so gut.

Nun zu meiner Frage:

Kann ich das Skript auch anzeigen lassen, wenn es abgearbeitet wird?

Hintergrund: ich würde gerne sehen, dass es läuft.

Mit einem Versand einer E-Mail am Skript Ende bin ich nicht weiter gekommen. https://forum.ubuntuusers.de/topic/e-mail-aus-skript-verschicken/

Oder könnte ich am Ende es Skripts ein Fenster aufpopen lassen?

Grüße

pegu

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Generell ist es keine gute Idee ein Backup-Skript dazu zu bringen ein Fenster aufpoppen zu lassen, denn damit schafft man eine Abhängigkeit zu einer aktiven Desktop-Session. Wenn du mitlesen willst, leite die Ausgaben des Skripts ins Log um (vgl. https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput= und https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardError=) und schau dir in einem Terminal z.B. mit

journalctl -u backup_linux.service -f -l 

an, was es gerade so treibt.

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3793

Wenn das Skript unter deinem Benutzer läuft, wäre

gxmessage -timeout 30 -center -wrap -bg green -fg white "  Backup ist fertig!  "

eine Möglichkeit. Das Meldungsfenster wird auch ohne Interaktion automatisch nach 30s geschlossen. Das Paket gxmessage ggf. nachinstallieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

seahawk1986 schrieb:

Generell ist es keine gute Idee ein Backup-Skript dazu zu bringen ein Fenster aufpoppen zu lassen, denn damit schafft man eine Abhängigkeit zu einer aktiven Desktop-Session.

Auf einem Server sicher nicht.

Ich schätze hier sind viele Leute unterwegs, die Linux ausschließlich als Desktopsystem benutzen. Ich selbst habe mehrere Geräte, die noch nie ohne ohne Desktopsession gelaufen sind.

pegu

(Themenstarter)

Anmeldungsdatum:
2. September 2020

Beiträge: 66

Hallo zusammen,

ich habe Linux nicht als Server laufen sondern "nur" als Desktop Anwendung, da es mein Windows ersetzten soll.

Daher habe ich jetzt mal den Vorschlag von dingsbums ausprobiert.

Wenn ich das Skript von Hand starte, bekomme ich das Meldefenster. Wenn das Skript aber von systemd ausgeführt wird, kommt es leider nicht ...

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

dingsbums schrieb:

Wenn das Skript unter deinem Benutzer läuft, wäre

Es müsste schon in der selben User-Session laufen - derselbe Benutzer reicht nicht, denn ein Systemdienst hat keine Informationen über eine möglicherweise (!) laufende Desktop-Session.

gxmessage -timeout 30 -center -wrap -bg green -fg white "  Backup ist fertig!  "

eine Möglichkeit. Das Meldungsfenster wird auch ohne Interaktion automatisch nach 30s geschlossen. Das Paket gxmessage ggf. nachinstallieren.

Wie findet das Programm denn heraus, welche Desktop-Sitzung benachrichtigt werden soll? Wenn es sich in der Hinsicht wie xsession verhält, dann wird das nix als Systemdienst, wie pegu ja bereits herausgefunden hat:

1
2
$ XAUTHORITY= DISPLAY= xmessage 'hello'
Error: Can't open display: 

Dieser Ansatz funktioniert unter Xubuntu (XFCE 4) und kann die relevanten Umgebungsvariablen setzen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh

# Set DISPLAY and XAUTHORITY of a desktop session of the given user
# and then execute the given command.

# args
# 1. numeric user id
# 2. and remaining: command line to execute

[ -z "$DEBUG" ] || set -x

set -e

session=xfce4-session

user="$1"
shift

if pid=$(ps --no-headers -o uid,pid $(pgrep "$session") \
  | awk -v "uid=$user" '$1 == uid {print $2; found=1} END {if (!found) exit 1}'); then
  env $(awk -F = -v RS=\\0 '$1 == "DISPLAY" || $1 == "XAUTHORITY"' /proc/$pid/environ) "$@"
else
  echo "ERROR: could not find session of user $user" >&1
  exit 1
fi

Bei mir poppt dann ein xterm auf (in einer Desktop-Session getestet, weil ich zu faul war, einen Systemdienst aufzusetzen):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ DISPLAY= XAUTHORITY= xterm && echo OK
xterm: Xt error: Can't open display: 
xterm: DISPLAY is not set
$ DISPLAY= XAUTHORITY= ./x $(id -u) xterm && echo OK
OK
$ DEBUG=1 DISPLAY= XAUTHORITY= ./x $(id -u) xterm && echo OK
+ set -e
+ session=xfce4-session
+ user=1000
+ shift
+ awk -v uid=1000 $1 == uid {print $2; found=1} END {if (!found) exit 1}
+ pgrep xfce4-session
+ ps --no-headers -o uid,pid 1176
+ pid=1176
+ awk -F = -v RS=\0 $1 == "DISPLAY" || $1 == "XAUTHORITY" /proc/1176/environ
+ env DISPLAY=:0 XAUTHORITY=/home/user/.Xauthority xterm
OK

Du musst nur herausfinden, wie der Prozess der Session für Dich (also unter Ubuntu) heißt und die Variable session in Zeile 14 entsprechend setzen.

pegu

(Themenstarter)

Anmeldungsdatum:
2. September 2020

Beiträge: 66

Hallo rklm,

sorry für die späte Rückmeldung!

Ganz ehrlich: Ich verstehe das nicht ...

Ich konnte meine Anliegen aber hier mit löschen

kkarsten62: Lösung

Grüße

pegu

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

pegu schrieb:

Ganz ehrlich: Ich verstehe das nicht ...

Ein Prozess benötigt bestimmte Angaben in seinem Environment, damit er auf einer Desktop-Session etwas anzeigen kann. Ein Systemdienst hat die nicht, weil er nicht als Kind der Desktop-Session gestartet wurde. Das Skript versucht den passenden Prozess zu finden und die relevanten Umgebungsvariablen zu extrahieren, damit sie für den Prozess gesetzt werden können, der auf dem Desktop ein Fenster aufmachen will.

Ich konnte meine Anliegen aber hier mit löschen

"Löschen" - soso... 😉

pegu

(Themenstarter)

Anmeldungsdatum:
2. September 2020

Beiträge: 66

Ups ...

Sollte lösen heißen...

Antworten |