Hallo zusammen,
ich habe ein kleines Problem und eine kleine Lösung:
Es geht um die Cronjobs, die man mit dem ISPConfig auf bequeme Art und Weise eintragen kann. Ich brauche Jobs, die alle fünf Minuten oder alle zehn Minuten laufen. Das sind meistens Kontrolltools, die Flags abfragen, um ggf. etwas anzustoßen.
Nachdem ich im ISPConfig mehrere Jobs angelegt habe, bemerkte ich
1. dass sich Home-Verzeichnis des Users (also im /var/www/webXX) eine Menge, zumeiste leere Dateien befanden.
2. Dabei stellte ich fest, dass die Cronjobs nicht alle 5 bzw. 10 Minuten liefen, sondern jede Minute.
Also habe ich mal untersucht, ob ich zweites Problem lösen lässt. In der Datenbank stand *,5 bzw. *,10 . Das ist ein Format, was im Cronjob nicht verarbeitet werden kann. Vermutlich habe ich so die Daten angegeben, also "all" und "5" bzw. "all" und "10". Gedacht war meine Eingabe als alle 5 Minuten bzw. alle 10 Minuten. In der Dokumentation habe ich keinerlei Hinweise zu den Cronjobs diesbezüglich gefunden. Also bin ich mal durch die Scripte von ISPConfig gegangen und folgende Datei gefunden:
/root/ispconfig/scripts/lib/classes/ispconfig_cron.lib.php
VORSICHT: Dort hat nur jemand etwas zu suchen, der weiß was er tut. Ich mag mich zwar mit Linux und Debian noch nicht so gut auskennen. Aber mit PHP schon, also rein in den Quelltext. Und siehe da, das Problem war schnell gefunden:
Die folgende Zeile hat genau 2 Tücken:
Theoretisch sollte man auch das Feld für Stunde, Tage und Monate entsprechend ändern. Wer sich in PHP auskennt, kann das ja bei sich tun. Ich bin mir sicher, dass dieses Problem in der nächsten Version schon behoben sein wird.
Doch für das Problem Nummer 1 habe ich keine Lösung. Normalerweise würde ich ein Script laufen lassen, welches regelmäßig die leeren Dateien löscht, doch obwohl die leeren Dateien den User des Webs haben, hat mein PHP-Script nicht die Befugnis auf diese zuzugreifen. Kennt jemand eine elegante Lösung, vielleicht sogar eine, um diese leere Dateien sogar wegzulassen?
Gruß
ich habe ein kleines Problem und eine kleine Lösung:
Es geht um die Cronjobs, die man mit dem ISPConfig auf bequeme Art und Weise eintragen kann. Ich brauche Jobs, die alle fünf Minuten oder alle zehn Minuten laufen. Das sind meistens Kontrolltools, die Flags abfragen, um ggf. etwas anzustoßen.
Nachdem ich im ISPConfig mehrere Jobs angelegt habe, bemerkte ich
1. dass sich Home-Verzeichnis des Users (also im /var/www/webXX) eine Menge, zumeiste leere Dateien befanden.
2. Dabei stellte ich fest, dass die Cronjobs nicht alle 5 bzw. 10 Minuten liefen, sondern jede Minute.
Also habe ich mal untersucht, ob ich zweites Problem lösen lässt. In der Datenbank stand *,5 bzw. *,10 . Das ist ein Format, was im Cronjob nicht verarbeitet werden kann. Vermutlich habe ich so die Daten angegeben, also "all" und "5" bzw. "all" und "10". Gedacht war meine Eingabe als alle 5 Minuten bzw. alle 10 Minuten. In der Dokumentation habe ich keinerlei Hinweise zu den Cronjobs diesbezüglich gefunden. Also bin ich mal durch die Scripte von ISPConfig gegangen und folgende Datei gefunden:
/root/ispconfig/scripts/lib/classes/ispconfig_cron.lib.php
VORSICHT: Dort hat nur jemand etwas zu suchen, der weiß was er tut. Ich mag mich zwar mit Linux und Debian noch nicht so gut auskennen. Aber mit PHP schon, also rein in den Quelltext. Und siehe da, das Problem war schnell gefunden:
Die folgende Zeile hat genau 2 Tücken:
1. Tücke. das "=== true" funktioniert in einigen PHP-Versionen nicht so wie erwartet. In "crontab -u webxx_x -e" fand ich nämlich überall *,5 bzw. *,10 an der ersten Stelle. Das installierte ISP-PHP hat es bei mir also nicht richtig erkannt, denn wenn ein * vorkommt, soll die Variable auf * setzen. Doch das ist mir nicht genug, ich will aus dem *,5 ein */5 machen. Also habe ich diese eine Zeile in drei Zeilen umgewandelt:if(strpos($user_cron['cron_minutes'], '*') === true) $user_cron['cron_minutes'] = '*';
Also statt === true sollte man auch !== false setzen. Und dann ersetzt man, sofern *, vorkommt, das Komma durch einen Slash. That's all.if(strpos($user_cron['cron_minutes'], '*,') !== false) {
$user_cron['cron_minutes'] = str_replace(',','/',$user_cron['cron_minutes']);
}
Theoretisch sollte man auch das Feld für Stunde, Tage und Monate entsprechend ändern. Wer sich in PHP auskennt, kann das ja bei sich tun. Ich bin mir sicher, dass dieses Problem in der nächsten Version schon behoben sein wird.
Doch für das Problem Nummer 1 habe ich keine Lösung. Normalerweise würde ich ein Script laufen lassen, welches regelmäßig die leeren Dateien löscht, doch obwohl die leeren Dateien den User des Webs haben, hat mein PHP-Script nicht die Befugnis auf diese zuzugreifen. Kennt jemand eine elegante Lösung, vielleicht sogar eine, um diese leere Dateien sogar wegzulassen?
Gruß