|
Emma2
Anmeldungsdatum: 28. Dezember 2018
Beiträge: Zähle...
|
Ich habe ein Script zum Sichern meiner KVM/QEMU-VMs, allerdings funktioniert es nicht so, wie es soll:
Wenn ich mich anmelde und es aufrufe, dann funktioniert es ganz prima Wenn es allerdings als Cronjob gestartet wird, erhalte ich die Fehlermeldung "VM does not exist"
In meinem Script stehen die Zeilen
| #check if VM exists at all
if ! `virsh list --all | grep -iq $1`
then
echo "$1": "$dateToday VM does not exist"
exit 1
fi
|
und wenn ich angemeldet in der Bash
aufrufe, dann klappt auch alles, nicht aber als Cronjob. Stimmt irgendetwas mit dem "-iq" im grep-Aufruf nicht? Ich dachte, dass 'q' ist gerade dafür, dass keine Ausgabe erfolgt, sondern nur das Ergebnis/Status zurückgeliefert wird. Der Aufruf
zeigt mir die VMs an, sowohl nach der normalen Anmeldung als auch nach einem sudo -i, am angemeldeten User scheint es also nicht zu liegen.
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
@Emma2 Leite mal die Ausgabe von virsh list --all (stdout und stderr) in eine Datei um vor dem if und schau was da drin landet wenn man das als cronjob ausführt. Gar nichts? Eine Fehlermeldung?
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: Zähle...
|
Danke. Ich füge in meine Crontab also die Zeile
| virsh list --all &>> virshlistall.txt
|
ein und melde mich dann wieder.
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: Zähle...
|
Mit der Zeile
| 20 * * * * virsh list --all &>> /home/localadmin/virshlistall.txt
|
wird die Datei virshlistall.txt angelegt, bleibt aber leer. Läuft der Cronjob viellicht "in einem anderen Kontext/Environment"? Ich habe die gleichen Skripten verwendet, also ich noch VirtualBox verwendet habe (natürlich mit entsprechenden vboxmanage-Befehlen), und da hat es funktioniert. Könnte es also sein, dass der User, unter dem die Cronjobs ausgeführt werden, nicht in der Gruppe ist, die Zugriff auf virsh hat? (Sorry, ich bin noch ganz neu bei KVM/QEMU.)
|
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 154
|
Hallo, Emma2 schrieb: Mit der Zeile
| 20 * * * * virsh list --all &>> /home/localadmin/virshlistall.txt
|
wird die Datei virshlistall.txt angelegt, bleibt aber leer.
Gebe doch mal den vollständigen Pfad von virsh mit an. Also:
| 20 * * * * /path/to/virsh list --all >>/home/localadmin/virshlistall.txt
|
Oder du trägst die Umgebungsvariable PATH in deine (Benutzer)-Crontab mit ein. Siehe: Cron (Abschnitt „Cron-Jobs-in-Benutzertabellen“) Gruß Carsten
|
|
von.wert
Anmeldungsdatum: 23. Dezember 2020
Beiträge: 12281
|
Wie wär's denn statt cron mit systemd/Timer Units? 😉
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 622
|
von.wert schrieb: Wie wär's denn statt cron mit systemd/Timer Units? 😉
Die habe ich noch auf meiner Lese-und-Lern-Liste ... aber bleibt das aktuelle Problem dort nicht auch?
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 622
|
CarstenHa schrieb: Gebe doch mal den vollständigen Pfad von virsh mit an. Also:
Damit ich's verstehe: Da auch kein Fehler ausgegeben wurde, nimmst Du an, dass virsh gar nicht gestartet werden konnte? CarstenHa schrieb: Gebe doch mal den vollständigen Pfad von virsh mit an. Also:
... Oder du trägst die Umgebungsvariable PATH in deine (Benutzer)-Crontab mit ein. Siehe:
Ich bin noch lange keine Experte:
|
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 154
|
Den Pfad eines Programms findest du mit type. Also in deinem Fall:
Wenn du die Möglichkeit mit PATH bevorzugst: Wie der Wert deiner PATH-Variable aussieht, kannst du Dir einfach mit echo anzeigen lassen. Also:
Die Ausgabe nimmst du dann und trägst das (am Anfang) von deiner Crontab ein. Also:
| PATH=deine_ausgabe_vom_echo_befehl
|
|
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 154
|
Emma2 schrieb: Damit ich's verstehe: Da auch kein Fehler ausgegeben wurde, nimmst Du an, dass virsh gar nicht gestartet werden konnte?
Genau. Ich bin noch lange keine Experte:
Das macht doch nichts. Ich auch nicht. Deine (User)-Crontab änderst Du mit:
BTW: Die Crontab von Benutzer root mit sudo-Rechten:
Welcher Cronjob ausgeführt wurde kannst Du Dir auch anzeigen lassen mit:
| journalctl -r | grep 'CRON'
|
Das sieht dann ungefähr so aus (User):
| Jul 20 15:00:00 benutzer CRON[11111]: (benutzer) CMD ...
|
oder bei root:
| Jul 20 15:00:00 benutzer CRON[11111]: (root) CMD ...
|
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 622
|
Hmm, habe ich jetzt gemacht, hat aber nichts geändert:
| ul 21 15:30:01 svh-dev.lan.pisoftware.de CRON[2272640]: (localadmin) CMD (/bin/virsh list --all &>> /home/localadmin/virshlistall2.txt)
Jul 21 15:20:01 svh-dev.lan.pisoftware.de CRON[2271261]: (localadmin) CMD (virsh list --all &>> /home/localadmin/virshlistall.txt)
Jul 21 14:20:01 svh-dev.lan.pisoftware.de CRON[2268129]: (localadmin) CMD (virsh list --all &>> /home/localadmin/virshlistall.txt)
Jul 21 13:20:01 svh-dev.lan.pisoftware.de CRON[2266361]: (localadmin) CMD (virsh list --all &>> /home/localadmin/virshlistall.txt)
Jul 21 12:20:01 svh-dev.lan.pisoftware.de CRON[2265173]: (localadmin) CMD (virsh list --all &>> /home/localadmin/virshlistall.txt)
|
und die Datei ist immer noch leer:
| $ ls -l v*.txt
-rw-rw-r-- 1 localadmin localadmin 0 Jul 21 12:20 virshlistall.txt
-rw-rw-r-- 1 localadmin localadmin 0 Jul 21 15:30 virshlistall2.txt
|
Aber auch die Zeile
| 50 * * * * /bin/virsh connect &> /home/localadmin/virshconnect.txt
|
generiert lediglich eine leere Datei.
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
Dann vielleicht mal das Debugging level so setzen, dass mehr Informationen ausgegeben werden. virsh hat da eine Option für. Womit verbindet sich virsh denn wenn Du einfach nur connect ohne eine URI machst? Kann es sein, dass Dein Benutzer mit dem das beim normalen Login funktioniert eine Umgebungsvariable dafür gesetzt hat? Die gibt's bei Cronjobs nicht, weil das ja nicht die Login-Skripte von dem Benutzer ausführt.
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 622
|
Seltsam (zumindest für mich als Nicht-Experte) ... Jetzt steht dort
| 0 * * * * /bin/virsh -d 0 list --all &>> /home/localadmin/virshlistall2.txt
50 * * * * /bin/virsh -d 0 connect &> /home/localadmin/virshconnect.txt
|
,
die Dateien werden erzeugt, aber sie bleiben beide leer:
| $ ls vi*.txt -l
-rw-rw-r-- 1 localadmin localadmin 0 Jul 22 07:50 virshconnect.txt
-rw-rw-r-- 1 localadmin localadmin 0 Jul 22 06:30 virshlistall2.txt
|
|
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 622
|
Marc_BlackJack_Rintsch schrieb: Kann es sein, dass Dein Benutzer mit dem das beim normalen Login funktioniert eine Umgebungsvariable dafür gesetzt hat?
Ich habe nichts explizit gesetzt, und ich kann da auch nichts entdecken:
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
26
27
28
29
30
31
32
33
34 | $ printenv
SHELL=/bin/bash
LC_ADDRESS=C.UTF-8
LC_NAME=C.UTF-8
LC_MONETARY=C.UTF-8
PWD=/home/localadmin
LOGNAME=localadmin
XDG_SESSION_TYPE=tty
HOME=/home/localadmin
LANG=C.UTF-8
LC_PAPER=C.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
SSH_CONNECTION=192.168.0.11 55172 192.168.0.93 22
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LC_IDENTIFICATION=C.UTF-8
LESSOPEN=| /usr/bin/lesspipe %s
LIBVIRT_DEFAULT_URI=qemu:///system
USER=localadmin
SHLVL=1
LC_TELEPHONE=C.UTF-8
LC_MEASUREMENT=C.UTF-8
XDG_SESSION_ID=13280
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.0.11 55172 22
LC_TIME=C.UTF-8
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/0
LC_NUMERIC=C.UTF-8
_=/usr/bin/printenv
OLDPWD=/bin
|
Sollte ich vielleicht ein virsh connect vor den Aufruf setzen? Aber es scheint doch der lokale Hypervisor das Default zu sein:
1
2
3
4
5
6
7
8
9
10
11
12
13 | $ virsh connect --help
NAME
connect - (re)connect to hypervisor
SYNOPSIS
connect [--name <string>] [--readonly]
DESCRIPTION
Connect to local hypervisor. This is built-in command after shell start up.
OPTIONS
--name <string> hypervisor connection URI
--readonly read-only connection
|
Ich versuch's also mal mit:
| 0 * * * * /bin/virsh connect && /bin/virsh -d 0 list --all &>> /home/localadmin/virshlistall.txt
|
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
@Emma2 Also ich entdecke da was: LIBVIRT_DEFAULT_URI=qemu:///system
|