PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cron Image per Job?


Kick
06.12.2005, 20:18
Hallo,

ist das $cronimage im Footer Template zwingend erforderlich? Ich könnte dieses doch auch z.B. jede Minute per Linux Job aufrufen, oder benötigt das "Image" umbedingt einen User Request?

Zusatzfrage:

Passt eigentlich nicht zum Thema, aber wollte das Forum nicht mit endlos vielen Topics zuspammen. Und zwar, nach welcher Zeit wird eine Session automatisch aus der DB gelöscht udn kann man diese Zeit irgendwo detailiert einstellen?

StGaensler
06.12.2005, 20:34
Theoretisch wäre es möglich, dieses zu entfernen, und durch einen Cronjob erledigen zu lassen, am einfachsten ist es aber, wenn du das so belässt. Wenn in deinem Forum kein User unterwegs ist, braucht es die Cronjobs auch nicht, und wenn es die Cronjobs braucht, sind automatisch auch User da. Lediglich so Dinge wie Geburtstagsmails sind Zeitgebunden. Aber einmal am Tag schaut doch bestimmt ein User vorbei, oder?

Ich würde mal darauf tippen, dass das dieser Wert ist:
AdminCP -> vBulletin-Einstellungen -> Cookies und HTTP-Header -> Cookie-Timeout

Kick
06.12.2005, 20:51
Danke erstmal für die schnelle Antwort!

Aber einmal am Tag schaut doch bestimmt ein User vorbei, oder?


Ich hab eigentlich nicht das Problem das zu wenige vorbeischaun, sondern viel zu viele. Bei mehreren Millionen PI im Monat wirkt sich das sicher auf die Performance der Server aus, da scheint es mir irgendwie vernünftiger das $cronimage per Job zu erledigen als bei jedem Seitenrequest.

Ich dachte mir nur, dass vielleicht irgendwelche Sessions mit dem Aufruf des $cronimage erstellt/entfernt werden und das File daher zwingend einen User Request benötigt.

Unter "Cookie-Timeout" steht bei mir
Dieses Zeitlimit (in Sekunden) bestimmt, wie lange ein Benutzer inaktiv bleiben muss, bis ungelesene Beiträge als gelesen markiert werden.

Bezieht sich scheinbar auf die Beiträge. Mich würde interessieren ab wievielen Sekunden ein User als inaktiv gilt (sich daher neu einloggen muss) und ob ich diesen Wert irgendwo selbst definieren kann.

Danke nochmal für die Hilfe!

StGaensler
06.12.2005, 21:05
Ich hab eigentlich nicht das Problem das zu wenige vorbeischaun, sondern viel zu viele. Bei mehreren Millionen PI im Monat wirkt sich das sicher auf die Performance der Server aus, da scheint es mir irgendwie vernünftiger das $cronimage per Job zu erledigen als bei jedem Seitenrequest.So viel wird sich das nicht auswirken :) vBulletin entscheidet ja bei jedem Seitenaufruf, ob es überhaupt notwendig ist.
Theoretisch könnte es funktionieren, wenn du die Zeile entfernst, und dann automatisch cron.php aufrufen lässt. Allerdings fällt vBulletin im Hintergrund bei jedem Seitenaufruf erneut die Entscheidung, ob ein Cronjob ausgeführt werden muss - somit hat sich an der Performance nichts verbessert. Da müsstest du quasi von Hand den entsprechenden Code entfernen - und bist nicht mehr Upgrade-kompatibel.
Bezieht sich scheinbar auf die Beiträge. Mich würde interessieren ab wievielen Sekunden ein User als inaktiv gilt (sich daher neu einloggen muss) und ob ich diesen Wert irgendwo selbst definieren kann. Die Beschreibung geht noch weiter: Zusätzlich wird der Benutzer nach seiner letzten Aktivität noch solange auf der 'Wer ist online' Liste angezeigt.
Somit ist der User nach dieser Zeit inaktiv. Wenn er allerdings ausgewählt hat, dass er angemeldtet bleiben möchte, kann er jederzeit wieder kommen, ohne sich erneut einloggen zu müssen.

Kick
06.12.2005, 21:21
Alles klar, ich lass das $cronimage mal drinnen. Für mich war es eigentlich nur wichtig zu wissen ob ich es gegebenenfalls entfernen kann ;-)

Sessiontimeout ist mir nun auch klar, gilt der angesprochene Wert auch für Logins ins Mod/AdminCp oder ist dieser genrell fix vorgegeben?

StGaensler
06.12.2005, 22:34
Der ist fix auf eine Stunde eingestellt. Kannst du aber auch verändern: http://www.vbulletin-germany.com/forum/showthread.php?t=18149

Kick
06.12.2005, 22:53
Hallo nochmal,

unter dem von dir angegebenen Link steht dass man das nicht ändern kann ;-)

Aber ich habs selbst gefunden in den vbOptions unter

vbEinstellungen -> Administrator-Kontrollzentrum. Sehr cool :)

Dank dir für die schnelle und Ausführliche Hilfe!

Andreas
07.12.2005, 08:41
1) Debug Mode, neue Einstellung "crontab" anlegen, auf 1 setzen
2) $cronimage raus
3) cron.php per php CLI, wget oder whatever per cronjob aufrufen
Fertig

Falls per CLI: Als erster Parameter kann die cronid angegeben werden, wrid keine angegeben wird automatisch der nächste ausgewählt.
Bitte beachten dass cron.php pro Aufruf nur max. 1 Job ausführt!

Ich habe allerdings keine Erkenntnisse, ob und wenn ja wieviel das an Entlastung bringt. Kann mir aber schon vorstellen dass es etwas bringt, denn mit jedem Aufruf von cron.php wird ja das Backend geladen - und 1/h (oder wie auch immer du das einstellst) vs. eine nicht näher definierbare Zahl y/h ist schon ein Unterschied :)

Und das ganze ohne jeglichen Support versteht sich :)

Kick
07.12.2005, 11:43
Und das ganze ohne jeglichen Support versteht sich :)
Klar versteht sich - Danke! ;)

gomi
17.03.2006, 12:25
Hab heute meinen gehirnlosen tag :confused:

1) Debug Mode, neue Einstellung "crontab" anlegen, auf 1 setzen


bitte welchen debugmode (wo?)
Einstellung crontab (wo?)


2) $cronimage raus

soweit klar



3) cron.php per php CLI, wget oder whatever per cronjob aufrufen
Fertig

Falls per CLI: Als erster Parameter kann die cronid angegeben werden, wrid keine angegeben wird automatisch der nächste ausgewählt.
Bitte beachten dass cron.php pro Aufruf nur max. 1 Job ausführt!


wie wird der parameter korrekt übergeben ?

bei "php cron.php cronid=4" z.B. passiert nix - i bin ein bisserl verwirrt :o

danke im voraus

StGaensler
17.03.2006, 19:23
1. Füge in deine config.php noch folgende Zeile innerhalb von <?php und ?> ein:$config['Misc']['debug'] = 1;Dann gehtst du ins AdminCP -> vBulletin-Einstellungen und wählst eine passende Einstellungsgruppe aus, und drückst dort oben auf [Einstellung hinzufügen] (admincp/options.php?do=addsetting) und erstellst damit diese Einstellung.

3. Weiß ich auch nicht genau, probiere mal "php cron.php?cronid=4"

Andreas
17.03.2006, 19:40
/path/to/php cron.php 4

gomi
20.03.2006, 11:16
so entweder hab ich was falsch gemacht oder... ??

generelle frage (wegen meinem verständnis):

cronimage aus dem footer entfernt (abhak)
parameter crontab eingetragen (abhak)
Der eintrag "crontab" -> options bedeutet dann ob er nachsieht ob's überhaupt in der setting einen eintrag crontab gibt - und dann startet
er. (abhak)


wenn ich dann "php cron.php 4 " starte dann heißt das doch das er cron startet und den task mit der id 4 - also in diesem fall "digestdaily" ausführen soll.

(oder startet er nur cron der dann nachsieht im crontable - aber wozu dann die id? )

Passieren tut leider mal gar nichts.. :confused:
irgendwelche ideen ?

danke

Andreas
22.03.2006, 22:14
Ja, so sollte das sein.

gomi
24.03.2006, 12:16
ich versteh' nicht :confused: - das script wird richtig ausgeführt - aber es tut sich nichts - nichtmal irgendwas.

Gibts nicht doch einen tip wo ich suchen kann ??

Andreas
24.03.2006, 13:20
Du hast eine Einstellung crontab mit Wert 1 anglegt?

gomi
24.03.2006, 13:36
hab ich - sieh grafik - hab auch die datatypes geändert ob sich da vielleicht was tut.

Ablaufen tut auf jeden fall was - wenn ich im cron.php die "required_once"-pfade ändere gibts einen error.log.

Aber sonst läuft es durch und macht nichts aber auch gar nichts....
deswegen dachte ich mir ob vielleicht die parameterübergabe "php cron.php 4" anders erfolgen muß.

ich brauch das und ich brings nicht hin.. *heul*

besteht vielleicht die möglichkeit die scripts z.B. "digestdaily" direkt aufzurufen ?

Andreas
24.03.2006, 13:56
Dass es in der settig Tabelle steht heißt noch gar nix :)
Steht es auch im options Datastore so?

Falls nicht: Mal eine Einstellung aufrufen und einfach wieder speichern -> Cache wird aktualisiert.

Du kannst einen Job natürlich auch manuell ausführen:

vBulletin Backend laden
includes/functions_cron.php laden

$cronid = X;
exec_cron($cronid);


... im Prinzip halt das was cron.php macht :)

PS: volatile=1 ist schlecht, zumindest wenn es zum Produkt vbulletin gehört - dann wird das nämlich mit dem nächsten Upgrade gekillt.

gomi
24.03.2006, 16:19
so stehts drin:

:"enablehooks";s:1:"1";s:7:"crontab";s:1:"1";}

gomi
24.03.2006, 16:36
jetzt hab ich folgende datei erstellt (einfach kopiert) mit folgendem code:

<?php

// ####################### SET PHP ENVIRONMENT ######
error_reporting(E_ALL & ~E_NOTICE);
ignore_user_abort(1);
@set_time_limit(0);

// #################### DEFINE IMPORTANT CONSTANTS ###
define('SKIP_SESSIONCREATE', 1);
define('NOCOOKIES', 1);
define('THIS_SCRIPT', 'cron');

// #################### PRE-CACHE TEMPLATES AND DATA ######
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array();

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ##
require_once('./global.php');
require_once(DIR . '/includes/functions_cron.php');

// #### START MAIN SCRIPT ############################


$cronid = 4;

exec_cron($cronid);


?>


und es passiert nichts *heul*

Andreas
24.03.2006, 16:51
Das kann eigentlich nicht sein :)
Hast du mal das logging eingeschaltet und geschaut ob der Job ausgeführt wird?

Zu beachten ist allerdings dass der Job nur ausgeführt wird wenn er auch fällig ist!

Ist er das nicht:


require_once(DIR . '/includes/functions_cron.php');
include_once(DIR . '/includes/cron/digestdaily.php');

gomi
24.03.2006, 17:31
heureka ! jetzt hats geklappt !

aber.. bei digestdaily ist eine gute frage wann der job dran ist.

Ich habe extra neue Beiträge reingebastelt (testforum) und nichts hat sich getan.

jetzt führt er es brav aus..

also wenn ich es richtig verstanden habe...

den job den ich brauche per "include_once...." einbauen...

verstehe nur nicht warum es mit cron.php alleine nicht funktioniert hat.

Andreas
24.03.2006, 17:36
Weil cron.php den job wie gesagt nur ausführt wenn er fällig ist :)
Wann er fällig ist siehst du im Scheduled Task Manager

gomi
24.03.2006, 17:42
der steht drin mit 00:02..

ja aaaber..

das würde ja dann bedeuten das ich cron.php mit der id exakt um 00:02 laufen lassen müßte

und andererseits habe ich ja schon gelesen das wenn niemand im forum ist die cronjobs beim nächsten möglichen mal ausgeführt werden - und nachdem das cronimage draußen ist wäre das ja dann wenn ich cron.php mit der id 4 starte.....

oder ?