CronJob wird 2x ausgeführt (Perl Script)

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Frizzant
Beiträge: 6
Registriert: 08.12.2015 09:00:24

CronJob wird 2x ausgeführt (Perl Script)

Beitrag von Frizzant » 08.12.2015 09:12:24

Hallo Zusammen :)

Ich habe mir einen kleinen VServer mit einem VCore und 2GB RAM bei Hetzner gekauft. Bisher läuft alles mehr oder weniger gut. <--war zwar unwichtig, aber irgendwas muss ich doch als Einleitung brigen. :mrgreen:

Also, zum Problem. Ich möchte ein Perl Script ausführen, dies alle 5min, aber möchte es auch nur ausführen, wenn es nicht bereits läuft.
Ich habe das ins "crontab"-file geschrieben:

Code: Alles auswählen

*/5 * * * * cd /usr/local/teamspeak3/teamspeak3-server_linux-amd64/RbMod_v3.2.4 && sh rbm_autostart.sh
im "rbm_autostart.sh"-file sieht es so aus:

Code: Alles auswählen

#!/bin/sh
ps afx | grep -v grep | grep -q ./rbmod.pl || cd /usr/local/teamspeak3/teamspeak3-server_linux-amd64/RbMod_v3.2.4/ && screen -d -m -S rb ./rbmod.pl
Und wie gesagt... dummerweise startet es mir den Bengel 2 Mal, wodurch sich die Scripts zu stören scheinen, und nicht mehr richtig funktionieren!
Wenn ich das richtig verstehe, sollte das checken ob das Scrypt läuft, und dieses sonst nicht starten? -->

Code: Alles auswählen

grep -q ./rbmod.pl
Beste Grüsse im Voraus :)

uname
Beiträge: 12474
Registriert: 03.06.2008 09:33:02

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von uname » 08.12.2015 09:33:10

Hallo und willkommen im Forum,

dein Problem kann ich nicht lösen. Könnte aber an "grep -q ./rbmod.pl" vs. "grep -q rbmod.pl" oder || und && und deren Nicht-Klammerung liegen. Bin mir aber nicht sicher.
Versuche aber generell erst mal alles umzuschreiben und löse dann ein evtl. neues Problem:

Code: Alles auswählen

*/5 * * * * /usr/local/teamspeak3/teamspeak3-server_linux-amd64/RbMod_v3.2.4/rbm_autostart.sh

Code: Alles auswählen

#!/bin/sh
ps afx | grep -v grep | grep -q rbmod.pl || screen -d -m -S rb /usr/local/teamspeak3/teamspeak3-server_linux-amd64/RbMod_v3.2.4//rbmod.pl
Oder so ähnlich. Nutze keinesfalls "cd" sondern immer absolute Pfade.
Die Prozessabfrage kann man bestimmt auch eleganter lösen.
Ob Debianscreen mit den absoluten Pfaden noch funktioniert und ob das Programm "rbmod.pl" mit absoluten Pfaden läuft weiß ich nicht. Aber dann solltest du eher das Script "rbmod.pl" noch mal überarbeiten.

Frizzant
Beiträge: 6
Registriert: 08.12.2015 09:00:24

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von Frizzant » 08.12.2015 09:41:42

Vielen Dank, werde ich nächstens mal versuchen. Melde mich dann wieder :)

Gruss Frizzant

Benutzeravatar
heisenberg
Beiträge: 4138
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von heisenberg » 08.12.2015 09:48:58

Eine zuverlässigere Variante, ein Script nur einmal zu starten ist flock.

Siehe hier:
https://tobrunet.ch/2013/01/follow-up-b ... ith-flock/

---

Oder Du schreibst ein Startscript für einen Systemdienst. Je nach verwendetem Betriebsystem kümmert sich das dann darum den Dienst immer wieder neu zu starten.

uname
Beiträge: 12474
Registriert: 03.06.2008 09:33:02

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von uname » 08.12.2015 09:58:52

heisenberg hat geschrieben:Oder Du schreibst ein Startscript für einen Systemdienst.
Früher hätte ich hierfür "respawn" in /etc/inittab verwendet. Schöner als Cron ist es allemal und die Ausfallzeit sinkt von maximal 5 Minuten in deinem Beispiel auf wenige Sekunden. Vielleicht kann jemand einen Link schicken wie man das heute mit systemd abbildet. Ich weiß nicht ob z.B. [1] funktioniert, da ich es selbst nicht verwende.

[1] http://forums.debian.net/viewtopic.php?f=5&t=122427

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von catdog2 » 08.12.2015 11:02:22

Also, zum Problem. Ich möchte ein Perl Script ausführen, dies alle 5min, aber möchte es auch nur ausführen, wenn es nicht bereits läuft.
Kannst du mit systemd erreichen: https://wiki.archlinux.org/index.php/Systemd/Timers

//edit:
Früher hätte ich hierfür "respawn" in /etc/inittab verwendet. Schöner als Cron ist es allemal und die Ausfallzeit sinkt von maximal 5 Minuten in deinem Beispiel auf wenige Sekunden. Vielleicht kann jemand einen Link schicken wie man das heute mit systemd abbildet. Ich weiß nicht ob z.B. [1] funktioniert, da ich es selbst nicht verwende.
Es soll doch alle 5min gestartet werden, nur nicht doppelt falls es mal zu lange braucht, dachte ich.
Unix is user-friendly; it's just picky about who its friends are.

Benutzeravatar
heisenberg
Beiträge: 4138
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von heisenberg » 08.12.2015 11:09:12

Etwas alle 5 Minuten ausführen, ist afaiu nur das Mittel zum Zweck: Einen Systemdienst am laufen halten.

Aber das Arch-Wiki, war ja schon mal gut. Hier ist 'ne Seite, die sich ausgiebig SystemD widmet:

https://wiki.archlinux.org/index.php/Systemd

Benutzeravatar
MSfree
Beiträge: 11714
Registriert: 25.09.2007 19:59:30

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von MSfree » 08.12.2015 11:25:16

heisenberg hat geschrieben:Etwas alle 5 Minuten ausführen, ist afaiu nur das Mittel zum Zweck: Einen Systemdienst am laufen halten.
Das ist nicht das Mittel zum Zweck sondern eine Zweckentfremdung bzw. Vergewaltigung.

Erstes Ziel muß sein, Dienste zu installieren, die gar nicht erst abstürzen und neu gestartet werden müssen. Dienste, die Abstürzen, sind potenziell auch immer eine Möglichkeit, das System zu kompromitieren.

Sollte erstes nicht möglich sein und ein Verzicht auf so einen dubiosen Dienst völlig unmöglich sein, dann kann sowohl systemd als auch Init Dienste respawnen.

Aber ein Cron, der alle paar Kuckuck prüft, ob ein Programm noch läuft und ggfls. neu startet, ist die falsche Herangehensweise.

uname
Beiträge: 12474
Registriert: 03.06.2008 09:33:02

Re: CronJob wird 2x ausgeführt (Perl Script)

Beitrag von uname » 08.12.2015 11:28:02

Nicht das es wichtig wäre. Aber wenn es als Dienst läuft braucht man auch den Umweg über Debianscreen oder Debiantmux nicht gehen.

Antworten