AdminMod.de
https://www.adminmod.de/

Plugin BK Cron Beta (Tester gesucht)
https://www.adminmod.de/viewtopic.php?t=4462
Seite 1 von 3

Autor:  [WING] Black Knight [ 01.12.2002, 02:02 ]
Betreff des Beitrags:  Plugin BK Cron Beta (Tester gesucht)

Ich schreibe derzeit an einem kleinen Cron-System für AdminMod. Für alle, die Cron nicht kennen, es handelt sich beim Original um einen Scheduler, der Kommandos auf einem Linux-System ausführt. Das gleiche, hatte ich mir gedacht, könnte man ja auch für AdminMod machen. Natürlich abgespeckt...

Ich bin jetzt soweit, dass man mit dieser Programmversion etwas anfangen kann, d.h. die Grundfunktionalität besteht, es gibt aber weder ein GUI noch eine Readme. Insbesondere letzteres ist zum Verständnis von Cron schon zwingend notwendig.

Daher suche ich Leute, die Bedarf an diesem Plugin haben, UND die sich bereits zumindest geringfügig mit Cron beschäftigt haben. Unter Laborbedingungen läuft es bereits.

Installation:
1. Plugin in den Ordner "addons/adminmod/scripts" installieren
2. schedule.ini im Ordner "addons/adminmod/config" erstellen
3. "exec tasks.cfg" in die server.cfg übernehmen (ganz ans Ende, hier werden CVars über den Mapchange gespeichert)
4. schedule.ini bearbeiten

Konfiguration:
Das Trennzeichen ist das Leerzeichen (doppelte Leerzeichen, Tabulatoren, etc. im Zeitbereich führen zu Fehlern, sind aber im Commandbereich zugelassen)

Musterbeispiel
* * * * * 1 mp_timelimit 20 delete

1. Spalte: Minuten (0-59,*)
2. Spalte: Stunden (0-23,*)
3. Spalte: Tage (1-31,*)
4. Spalte: Monate (1-12,*)
5. Spalte: Wochentag (0-6,*) 0=Montag

6. Spalte: Cvar (nein/ja) (0,1)

7. Spalte: Der auszuführende Befehl

Besonderheit ist die Spalte 6. Hier muss man angeben, ob es sich um eine CVar handelt. Wenn ja (1) wird dieser Befehl zusätzlich in der tasks.cfg gespeichert und so beim Mapchange wieder übernommen.
Will man dies wieder löschen, so muss man in einem anderen Task den gleichen Befehl angeben und ein "delete" anfügen.

Bsp
0 12 * * * 1 mp_timelimit 20
0 0 * * * 1 mp_timelimit 30 delete

Im ersten Task wird jeden Tag (unabhängig von Monat und Wochentag) Punkt 12 Uhr das Timelimit auf 20 Minuten gesetzt. Dies bleibt über alle Mapchanges erhalten, egal was in der server.cfg steht.
Der zweite Task löscht um 0 Uhr jeden Tages diesen Eintrag aus der tasks.cfg und setzt den Wert auf 30 Minuten. Dieser Wert gilt bis zum Mapchange, anschließend gilt hier der Wert aus der server.cfg, soweit definiert.

Ein Task zu verschiedenen Zeitpunkten
Ich möchte den gleichen Task zu verschiedenen Zeitpunkten ausführen. Dafür stehen mir zwei Möglichkeiten offen:

Beispiel, falls ein Task viertelstündlich ausgeführt werden soll:
0,15,30,45 * * * * 0 say Viertelstunde vorbei!
oder
60/4 * * * * 0 say Viertelstunde vorbei!

Beide Beispiele machen das gleiche. Allerdings fängt das zweite immer bei 0 an!

Einschränkungen:
1. Es ist nicht erlaubt Kommas und Slashes in einer Spalte zu verwenden, in verschiedenen kein Problem!
2. Es sind prinzipbedingt lediglich 50 Kommandos erlaubt. Dies ist nicht die Anzahl der Einträge in der schedule.ini, sondern die dadurch produzierte. S. Viertelstunde-Beispiel. Hier werden 4 Kommandos produziert. Wenn man die Anzahl der Kommandos vorausberrechnen will, muss man nur die Anzahl der Einträge in den Spalten miteinander multiplizieren. Gleiches Beispiel: 4*1*1*1*1 (Joker zählen als 1).
3. Pro Spalte sind maximal 10 Kommandos erlaubt.

Befehl(e):

admin_cron_refresh

Dies ist derzeit der einzige Befehl. Dieser sollte ausgeführt werden, sobald die schedule.ini bearbeitet wurde. Die schedule.ini wird dann neu eingelesen. Das gleiche kann man auch über einen Mapchange erreichen.

Bekannte Bugs:
- Bei Lag kommt es zu einer Verschiebung des Timers, bei extremen Lag (60 Sekunden) könnte evtl. eine Kommando verschluckt werden. (Mal sehen, ob ich da noch eine Lösung finde.
- Noch nicht überprüft, was leere Zeilen in der schedule.ini oder eine leere Datei verursachen.

Eure Aufgabe:
Ich würde gerne wissen, ob das Plugin so läuft wie es soll. Dazu brauche ich Rückmeldung, ob positiv oder negativ, Hauptsache fundiert!

ToDo:
-Bugfixing
-GUI
-mp_timeleft setzen lassen

Würde mich freuen, wenn Ihr mich unterstützen könntet. Ist, glaube ich, ein ganz sinnvolles Skript.

Autor:  Rinde [ 01.12.2002, 03:39 ]
Betreff des Beitrags: 

wenn es so funktioniert wie du es beschreibst, isses ziemlich perfekt, was willst du da noch verbessern? testen hab ich jetzt keinen bock, besonders, da ich für sowas überhaupt keine verwendung hab. das einzige was mir bei kurzen überfliegen aufgefallen ist: die timer haben nicht die parameter (Timer,Repeat,HLUser,HLParam), sondern irgendwas anderes. nicht schön. z.b. könntest du
Code:
public regular_timer() {
	set_timer("admin_cron_check",60,99999);
	admin_cron_check();

	return PLUGIN_CONTINUE;
}
durch
Code:
public regular_timer(Timer,Repeat,HLUser,HLParam) {
	set_timer("regular_timer",60,0);
	admin_cron_check();
	return PLUGIN_CONTINUE;
}
ersetzen. des weiteren würde ich
Code:
public admin_cron_refresh(){
so nicht für eine command funktion benutzen.
Code:
public admin_cron_refresh2(HLCommand,HLData,HLUserName,UserIndex) {
    admin_chron_refresh();
    return PLUGIN_HANDLED;
}
und
Code:
admin_cron_refresh() {
...
mit
Code:
plugin_registercmd("admin_cron_refresh","admin_cron_refresh2",ACCESS_KICK,"Refreshes time table");
wäre in meinen augen viel "sauberer"
*rummoser*
ich geh ins bett, gute nacht

Autor:  [WING] Black Knight [ 01.12.2002, 16:01 ]
Betreff des Beitrags: 

Um das noch auf die Art und Weise zu implementieren war ich dann doch zu müde. Ich werde das noch so umbauen.
BTW, ich spreche von Bugsuchen nicht von Verbessern. Der Rest, der noch dazukommen soll, ist nettes Beiwerk, verbessert die Funktionalität aber nicht.

Autor:  Rinde [ 01.12.2002, 19:41 ]
Betreff des Beitrags: 

sorry :oops:

Autor:  [WING] Black Knight [ 01.12.2002, 22:33 ]
Betreff des Beitrags: 

Wieso sorry??? Einwände waren doch ok.

Autor:  hal [ 12.12.2002, 16:38 ]
Betreff des Beitrags: 

das hab ich doch schon jahre lang gesucht *g*

DANKE DANKE DANKE

funktioniert super !!!

ich benutze es um jeden tag einen anderen mapcycle und ne andere config auszufuehren

meine schedule.ini sieht so aus

60/2 * * * 1 1 exec configs/montag.cfg
60/2 * * * 2 1 exec configs/dienstag.cfg
60/2 * * * 3 1 exec configs/mittwoch.cfg
60/2 * * * 4 1 exec configs/donnerstag.cfg
60/2 * * * 5 1 exec configs/freitag.cfg
60/2 * * * 6 1 exec configs/samstag.cfg
60/2 * * * 7 1 exec configs/sonntag.cfg ***

in den configs steht dan z.b.

hostname "www.UNGeWiss.de COSTUM MAP TAG"
mapcyclefile configs/standard.txt
mp_timelimit 30
mp_freezetime 3

das plugin ist echt schoen geworden zumindest was die funktionalitaet angeht

p.s. sind das jetzt 42 commands oder 14 ???

*** und kann es sein das 0 sonntag ist ? und nicht montag oder ist sonntag 7 *verwirrmodus aus*
ich hab das plugin erst seit heut laufen und kann nur sagen das donnerstag 4 ist.

gruss HAL

Autor:  [WING] Black Knight [ 12.12.2002, 16:57 ]
Betreff des Beitrags: 

Was hab ich denn geschrieben. Ich meine die Variante würde mit 0 für Montag anfangen. Muss ich aber mal nachsehen. Aber kann durchaus sein. Die Info habe ich aus dem PHP Handbuch. Evtl. gibt es da einen Unterschied.

Allerdings hast Du etwas übertrieben. Bei Dir wird das ja jede halbe Stunde ausgeführt.
Es reicht ja einmal pro Tag, da Du die exec mit in die tasks.cfg aufgenommen hast. Diese wird aber bei jedem Mapchange ausgeführt. Also von Haus aus alle 30 Minuten (s. timelimit) ausgeführt.

Ergo würde ich vorschlagen:

0 0 * * 1 1 exec configs/montag.cfg
0 0 * * 2 1 exec configs/dienstag.cfg
0 0 * * 3 1 exec configs/mittwoch.cfg
0 0 * * 4 1 exec configs/donnerstag.cfg
0 0 * * 5 1 exec configs/freitag.cfg
0 0 * * 6 1 exec configs/samstag.cfg
0 0 * * 7 1 exec configs/sonntag.cfg

Dadurch wird die Config jeden Tag um 0 Uhr in die tasks.cfg geschrieben und gilt dann solange, bis sie um 0 Uhr des nächsten Tages wieder überschrieben wird.
Macht dann nur 7 Commands und weniger Aufwand für das Plugin.

Deine Variante hat 14 Commands produziert (2*1*1*1*1).
Ich weiß, das ist auf den ersten Blick nicht so einfach, aber das Cron System ist, wenn man das Prinzip mal begriffen hat, super einfach und flexibel einsetzbar.

Autor:  hal [ 12.12.2002, 17:45 ]
Betreff des Beitrags: 

wow und dann auch noch superschnelle antwort vom programmierer SUPER !!!

- Bei Lag kommt es zu einer Verschiebung des Timers, bei extremen Lag (60 Sekunden) könnte evtl. eine Kommando verschluckt werden. (Mal sehen, ob ich da noch eine Lösung finde.

^^^^ deswegen alle halbe stunde ich wollt nur sicher gehen das er den cronjob auch ausfuehrt

und warum ist es eigenltlich so schwer so gute plugins zu finden das ist doch auf alle faelle einen eintrag bei adminmod.de bzw. adminmod.org wert

Autor:  [WING] Black Knight [ 12.12.2002, 17:59 ]
Betreff des Beitrags: 

1. Beide Pluginseiten sind wegen Umbaumaßnamen derzeit nicht aktuell.
2. Es ist eine Betaversion ohne GUI.
3. Wegen Punkt 2 habe ich den Thread natürlich zur E-Mail-Benachrichtigung angeklickt. Will ja schließlich wissen, ob alles klappt und wo Probleme auftreten. Dadurch kann ich schnell reagieren.
4. Ich würde mir wegen der Abweichung keine so großen Gedanken machen. Bei einer Mapdauer von 30 Minuten ist ein Lag von insgesamt 60 Sekunden Länge unwahrscheinlich. Wenn es schlecht läuft kommt man vielleicht auf 20 Sekunden in 30 Minuten. Nichtsdestotrotz habe ich vor die letzte Minutenzeit zu checken, zu merken und mit der aktuellen zu vergleichen. Bei Abweichung größer als 1, wird dann die vorherige Minute auch gecheckt und ggf. dieser Befehl auch ausgeführt. Aber das ist Zukunftsmusik.
5. Vielen Dank, dass es Dir so gefällt. Falls Probleme auftauchen, irgendetwas nicht klappt oder es evtl. perfekt funktioniert ;) würde ich mich über eine Rückmeldung freuen.

Autor:  DarkEyes1 [ 13.12.2002, 17:48 ]
Betreff des Beitrags: 

@ hal

biste mal so net, und postest deine cfg`s ?

ich möchte mir die mal anschauen, evtl. was übernehmen...

brauche immer erst ein beispiel, um vorran zu kommen...

Autor:  [WING] Black Knight [ 15.12.2002, 03:34 ]
Betreff des Beitrags: 

OK, neue Version ist da => neuer Thread

http://board.battlenation.de/viewtopic.php?p=27362

Autor:  DarkEyes1 [ 15.12.2002, 11:24 ]
Betreff des Beitrags: 

brauche bitte ein beispiel für z.B.

jeden freitag, von 18 - 20 uhr, only de_dust, freezetime 0

Thanx

Autor:  [WING] Black Knight [ 15.12.2002, 13:40 ]
Betreff des Beitrags: 

Entweder 4 einzelne Tasks oder mit 2 Tasks und einer auszuführenden Datei:

4 Tasks Variante
Code:
0 18 * * 5 1 mapcyclefile onlydedust.txt
0 18 * * 5 1 mp_freezetime 0
0 20 * * 5 1 mapcyclefile mapcycle.txt delete
0 20 * * 5 1 mp_freezetime 4 delete
2 Tasks Variante
Code:
0 18 * * 5 1 exec onlydedust.cfg
0 20 * * 5 1 exec server.cfg delete
BTW, bitte server.cfg nur in Verbindung mit "delete" verwenden. Ansonsten gibt es eine Endlosschleife.

onlydedust.txt:
Code:
de_dust
onlydedust.cfg:
Code:
mapcyclefile onlydedust.txt
mp_freezetime 0

Autor:  DarkEyes1 [ 15.12.2002, 15:47 ]
Betreff des Beitrags: 

ahhh, bin durchgestiegen...

is ja wirklich ganz einfach... :wink:

Autor:  DarkEyes1 [ 15.12.2002, 16:22 ]
Betreff des Beitrags: 

wird dann um 18 Uhr die map automatisch gewechselt, oder nur der mapcycle auf de_dust geändert?... also, nach dem nächsten mapchange kommt dann dust.... bis 20 uhr...

wenn dann aber dust bis 20.10 läuft, wird erst zuende gespielt? oder?
dann wieder normaler mapcycle... !?

oder muss irgendwo noch ein admin_map rein ?

wie ist das eigendlich, wenn ein admin manuell die map wechselt ? ist dann der cronjob deaktiviert ?

Autor:  [WING] Black Knight [ 15.12.2002, 22:40 ]
Betreff des Beitrags: 

Der Cronjob wird nur einmal tätig. Was Ihr dazwischen macht, weiß er nicht!
Die Map wird nicht gewechselt, wenn man nur das mapcyclefile ändert. Sowohl um 18:00 Uhr als auch um 20:00 Uhr.

Da müsstest Du einfügen:
Code:
0 18 * * 5 0 admin_command admin_map de_dust
BTW, ich habe admin_map und nicht changelevel verwendet, da admin_map erst nach 4 Sekunden aktiv wird, d.h. dass auch die anderen (z.B. exec) noch ausgeführt werden.

PS.: Es gibt jetzt den RC2. Siehe Link in meinem vorherigen Post.

Autor:  DarkEyes1 [ 16.12.2002, 20:44 ]
Betreff des Beitrags: 

habs jetzt so:

0 18 * * 5 0 admin_command admin_map de_dust
0 18 * * 5 1 exec onlydedust.cfg
0 20 * * 5 1 exec server.cfg delete

die onlydedust.cfg sieht so aus:


hostname "de_dust bis 20 Uhr"
mp_startmoney 16000
mapcyclefile onlydedust.txt

funzt soweit...
aber, er löscht die tasks.cfg nicht... der hostname bleibt erhalten...
why? :cry:

Autor:  [WING] Black Knight [ 16.12.2002, 23:00 ]
Betreff des Beitrags: 

Hast Du "hostname" auch in der server.cfg stehen?

Autor:  DarkEyes1 [ 17.12.2002, 18:34 ]
Betreff des Beitrags: 

joa... kam wohl, weil ein admin nen cw mit dem cwcreator gestartet hatte... dann war beim cw die einstellung der onlydedust.cfg bindend... ich hab die tasks.cfg manuell gelöscht... dann ging es wieder...

ich habs mit admin_cron_forceexe 3 versucht... ging net...

Autor:  [WING] Black Knight [ 17.12.2002, 20:45 ]
Betreff des Beitrags: 

Bist du Dir da sicher?

Ich habe das mit den "exec"'s ausprobiert und es ging.
Bei richtiger Installation wird der CW Creator die Einstellungen in der tasks.cfg überschreiben, da die war.cfg später ausgeführt wird.

Und forceexe funktioniert bei mir auch wunderbar.

Seite 1 von 3 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/