Naja, da bin ich völlig anderer Meinung. Systemfunktion muss einfach schlicht und ergreifend in der Umgebung zu sehen sein was im Hintergrund passiert wenn man diese gestartet hat.
Man hat wieder kein Feedback was passiert und in welchem Zustand das System sich befindet.
Letzen Endes hat man wieder keine Kontrolle und kein sicheres Verhalten wo man abdecken kann.
Dann muss man sehen was man da macht. Echt wieder ärgerlich das ganze …
Sorry, aber die Routine habe ich zur Verfügung gestellt um anderen zu helfen. Sie hat keinen Anspruch auf Perfektion. Noch weniger ist es eine Systemfunktion.
Sicherlich kann man sie verbessern. Da ist jedem freigestellt, es zu tun.
@paresy
Ich habe nochmal probiert mich mit dem Thema auseinander zusetzen.
Thema ist das irgendwann die Verbindung zur Konsole abbricht.
Ich versuche über das Script 23Millionen Datensätze zu kopieren. Ich nutze die Scriptvorlage von @bumaas.
Bei mir kommt noch dazu das nach dem Absturz der Konsole in den PHP Infos das Script seltsamerweise dann dreimal aufgerufen wurde.
Warum soll mal ein Script 5 Minuten laufen lassen
Wenn du schon die Datensätze in 1000er Stücke zerhackst. Dann lass die Schleife doch weg und dafür das Script sich selbst neu starten. Dann blockiert das Script nicht ewig die PHP-Threads.
Dafür gibt es ja IPS_RunScriptEx, wo du die Werte von $endtime und $count übergeben kannst.
Michael
PS: Nur weil das Laufzeitlimit entfernt wurde, sollte man Scripte nicht ‚ewig‘ ausführen.
PPS: Es wurde ja nur entfernt weil es noch mehr Probleme machte.
Warum sollte man es künstlich zerhacken? Nur um alle X Minuten einen anderen Thread zu belegen?
Aber noch eine Ergänzung zu meinen Beobachtungen:
Wenn man das Skript über das Kontextmenu „Automation ausführen“ aufruft, dann läuft alles korrekt.
Also liegt es wohl wirklich daran, dass die Konsole im Skripteditor (und nur dort) maximal 5 Minuten auf das Ende des Skripts wartet. Das ist ja auch eigentlich ok.
Warum die Konsole dann aber das Skript von sich aus neu startet, das erschließt sich mir nicht.
Damit auch andere Scripte die Chance bekommen mal eben für ein paar ms ausgeführt zu werden?
Es gab schon immer die Maßgabe das Scripte nur so kurz wie nötig ausgeführt werden sollen.
Vermutlich hast du jetzt den negativen Nebeneffekt des aufgehobenen Laufzeitlimit gefunden.
Wie hättest du es denn früher bei dem 60Sek. Limit gelöst?
Michael
PS: Wäre es nicht ‚schneller‘ direkt die CSV zu verändern und dann einmal zu reaggregieren?
Zum Thema 5 Minuten: es gibt gerade einen parallelen Thread. Scheint ein Fehler der aktuellen Konsole zu sein.
Zum Laufzeitkonzept: Entweder die Scripte werden beendet nach z.B. 60 Sekunden und ich kann mich drauf verlassen (z.B. bei Verwendung von ‚buggy PHP Funktionen‘) oder ich kann sie laufen lassen solange ich will.
Wie hier halt einmalig z.B. 10 Minuten für eine rechenintensive Aufgabe. Gerade bei solch einmaligen Aktionen und häufig 50 möglichen PHP Slots, sehe ich hier keine Probleme.
Die Funktion wurde ja entfernt, weil das Abschießen von PHP-Threads mehr Probleme verursacht hat, als gelöst. Die Threads blieben dennoch gerne mal hängen. Das ist jetzt IMHO weniger/weg.
Aber dies jetzt als Grund zu benutzen um zu argumentieren Scripte dürfen jetzt ewig laufen ist leider eine falsche Schlussfolgerung.
Dann darf man doch dieses technische Verständnis bei Fortgeschrittenen annehmen?
das können aber viele csv-Dateien sein, wenn man mehrere Jahre eine Variable geloggt hat Ich hatte mal so einen Fall und habe dann letztendlich ein Script wie @bumaas geschrieben.
@bumaas
Danke für deine ausführlichen Tests und Beschreibung.
Aber dann für mich als Laie nochmal, wie man in so einem Fall von sehr vielen Millionen Daten jetzt damit umgehen soll hier ein sicheres und problemloses Transferieren der Daten hinbekommen soll.
Ich sehe jetzt irgendwie keine kein wirklich guten Lösungsansatz !