VM sollte automatisch restarten

vikozo

Renowned Member
May 4, 2014
781
31
93
suisse
www.wombat.ch
Hallo

ich habe eine VM eingerichten als ArbeitsPC!
Diesen kann man runterfahren wie bei jedem Win oder Linux!

was ich versuche ist den VM automatisch wieder zu starten mit einem kleinen Skript, der eigentlich auch läuft!
vi /usr/local/bin/run971.sh und dann chmod +x
Code:
#!/bin/bash
#  Keep the VM 971 up and runningI
#############################################################
# Check status of the VM 971 if stopped restart
STATUS=$(qm status 971)
if [[ "status: running" != "${STATUS}" ]]; then
       qm start 971
fi
der skript alleine läuft wie erwartet.

wenn ich es in crontab -e einfüge
Code:
*/5 * * * *  /usr/local/bin/run971.sh > /dev/null 2>&1
dann wird der Skript auch aufgerufen.
Code:
pve-04 CRON[2402]: (root) CMD (/usr/local/bin/run971.sh > /dev/null 2>&1)
aber der vm wird nicht gestartet.

rufe ich aber nur /usr/local/bin/run971.sh dann startet es!

gruss
Vinc
 
Weil in deinem script die Pfadangabe nicht alle da sind und daher via cron qm nicht korrekt aufgerufen wird?
 
qm ist meines Wissens in /usr/sbin und das kennt cron nicht...
 
So nebenbei, lass mal in der crontab das > /dev/null 2>&1 weg, damit die Ausgaben des scripts im syslog auftauchen.
 
Code:
Oct 19 22:40:01 pve-04 CRON[24917]: (root) CMD (/usr/local/bin/run971.sh)
der output ohne fehler ohne nicht mit der /usr/sbin/qm anpassung vorab
 
Sorry, aber den Satz versteh ich nicht?

ändere mal im Script

STATUS=$(qm status 971) -> STATUS=$(/usr/sbin/qm status 971)

(wenn qm dort liegt)

und dann crontab -e

*/5 * * * * /usr/local/bin/run971.sh
 
@gmed danke für deine Idee, aber
Code:
pve-04 CRON[20388]: (root) CMD (/usr/bin/bash /usr/local/bin/run971.sh)
steht im Log file ohne Fehler aber auch ohne es zu starten.
Es manuel zu starten gibt ein
/usr/local/bin/run971.sh: line 9: STATUS=$(/usr/sbin/qm status 971): ambiguous redirect
aber es startet
 
Also fehlte der Pfad. Prima, ist das doch gelöst.

Für die Variable STATUS würde ich folgende Schreibweise wählen:

STATUS=`/usr/sbin/qm status 971` (mit Backticks)

Zudem sollte man eigene Variablen klein schreiben, um sie von Systemvariablen unterscheiden zu können und deren Überschreiben zu verhindern.
 
Code:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
STATUS=$(which qm status 903)

if [[ "status: running" != "${STATUS}" ]]; then
       $(which qm) start 903
fi

eigentlich klappt der code so, wenn die VM abgestellt wird - startet sie wieder!

bloss habe ich jetzt im Proxmox log
TASK ERROR: VM 903 already running
 
Nur um das richtig zu verstehen:
Proxmox zeigt in WebUI die VM903 als ausgeschaltet
du führst dein script aus
Proxmox zeigt im WebUI, dass die VM schon läuft?
VM903 wird gestartet

so korrekt?

STATUS=$(which qm status 903) geht so nicht, weil which nur den Pfad zu qm raushaut.
Korrekt wäre:

status=$(`which qm` status 903)

dann wird which den Pfad zu qm ausgeben und an dessen Ergebnis status 903 angehängt und die komplette Ausgabe in die Variable status geschrieben.

Was so aber nicht nötig ist, da du den Pfad zu qm ja in Path schon mit definiert hast. Damit reicht entweder status=`qm status 903` oder status=$(qm status 903)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!