Probleme mit dem Cronjob samt Skript

Kraligor

Commodore
Registriert
Sep. 2008
Beiträge
4.989
Hallo zusammen,

ich bin ziemlicher Laie, deshalb: Entschuldigt, falls ich völligen Mist zusammengeskriptet habe.

Also, ich möchte meinen Linux Mint Server gern automatisch herunterfahren lassen, wenn minecraft.sh beendet wurde.

Dazu schrieb ich folgenden Cronjob in /etc/crontab:
Code:
*/3   * * * *   root    /bin/bash --login /home/kraligor/shutdown/shtdn.sh
Er soll also alle drei Minuten mittels root shtdn.sh ausführen.

shtdn.sh:
Code:
#!/bin/bash
sleep 60
shd=
ps -C minecraft.sh > /home/kraligor/shutdown/log.log
shd=`grep --files-with-match minecraft /home/kraligor/shutdown/log.log`
echo $shd 
if test "$shd" = "log.log"
then
echo "Minecraft is running. Staying alive."
else
shutdown -P now
fi
Er soll zunächst 60 Sekunden warten (damit er nicht am Systemstart gleich wieder herunterfährt), dann werden die Prozesse nach "minecraft.sh" durchsucht und das Ergebnis in "log.log" geschrieben. Dann wird "shd" definiert als der Filename von log.log, in dem sich "minecraft.sh" befindet. Klartext: Wenn minecraft.sh läuft, ist "shd"="log.log", wenn nicht, ist "shd" leer.

Nun fährt er leider immer runter, egal, ob minecraft.sh läuft oder nicht.

Bestimmt ist es ein unübersehbarer Noobfehler, ich schäme mich schonmal im Voraus. :)

Danke!
 
Also ich bin auch ein Anfänger was Unix betrifft, aber meines wissens für man shell-dateien so aus:

Code:
sh /pfad/zur/datei.sh
 
warum nicht so:

ps ax | grep -v grep | grep -q minecraft.sh
if [ $? -eq 0 ]; then
echo "Minecraft is running. Staying alive."
else
shutdown -P now
fi

noch was.
über cron gestartet, kennen die jobs nahezu keine Systemvariablen.
Also wenn notwendig, definieren.
 
Ich finde das irgendwie unnötig kompliziert, würde sowas wie das hier nicht ausreichen?

if test ! $(ps aux | grep minecraft.sh | grep -v grep) then
shutdown -P now;

edith: da war jemand etwas schneller ^^
 
Danke, prima! Ich probier's gleich mal aus.

Warum so kompliziert? Weil ich keine Ahnung von Shellscripting habe und ich mir das irgendwie mittels trial und error und ungezieltem Gegoogle zusammengepfuscht habe. ;)

EDIT:

Prima, funktioniert mit Benutzer_nr1958s Code, vielen Dank!

Wenn man mir jetzt noch sagen könnte, weshalb es mit meinem nicht funktionierte, wäre ich ein glücklicher Mensch. :)
 
Zuletzt bearbeitet:
ich habe es mal ausprobiert.

in der Variablen shd steht bei mir auch der Pfad und nicht nur log.log

mutt du gucken ;-)


edit:
@N3xus_2k4

m.E. sind die beiden grep's für test vertauscht, so wird der return-Wert von "grep -v grep" ausgewertet. Wir wollen aber auf minecraft.sh testen.
 
Zuletzt bearbeitet:
Statt ps-grep-Orgien empfehle ich "pidof /pfad/zum/programm" als Test.

Zumindest auf Rechnern mit Nutzer-Logins sind cronjobs ala "ps aux | grep minecraft.sh | grep -v grep" eher unschön, da jeder Nutzer solche Prozesse mit " minecraft.sh" im Namen erstellen kann ...
 
Zurück
Oben