Das blockiert mir dann meine Console für 5 Minuten ich erhalte diese Ausgabe:
[OK] Consuming messages from transports "failed, async, low_priority".
// The worker will automatically exit once it has exceeded 512M of memory, been running for 300s or received a stop
// signal via the messenger:stop-workers command.
// Quit the worker with CONTROL-C.
Scheduled task runner stopped due to time limit of 300s reached
Welchen Teil habe ich hier übersehen? Wo stelle ich ein wann der Job ausgeführt werden soll?
Du hast anscheinend den Unterschied zwischen Befehl und Cronjob verstanden. Ein Befehl wird in der CLI ausgeführt. Ein Cronjob ist ein Programm, dass nach zeitlichen Mustern Befehle ausführt.
Falls du einen eigenen Server hast, kannst du bspw. per crontab -e die Cronjobs für deinen Benutzer öffnen. Solche Rechte hast du bei Managed Servern in der Regel aber nicht, daher gibt es Anleitungen, wie schon hier im Forum verlinkt.
Das --time-limit ist dafür da, dass der Befehl nicht unendlich läuft und nach x Sekunden beendet wird. Je nachdem in welchem Minutentakt der Cronjob den Befehl aufruft, desto niedriger/höher musst du --time-limit setzen. Achte aber darauf, dass --time-limit den Befehl nicht abbricht, sondern ein „Beende die Ausführung am nächstmöglichen Zeitpunkt“ sendet. Daher würde es bei --time-limit=60 und Cronjob jede Minute zu Überschneidungen kommen, was deinen RAM des Servers komplett aufbrauchen kann. Um das zu verhindern gibt es weitere Programme, siehe FAQ.
Habe das wie in der eingangs erwähnten Bash am Laufen.
Nur getrennt in 2 Files:
messenger_consume.sh
und
scheduled_task_run.sh
Die werden dann per Cron alle 5 min. aufgerufen.
Die Aufrufe sollten sich halt zeitlich nicht überschneiden.
Denke die Lösung ist besser als über PHP public. Denn die kann theoretisch ohne extra Schutz jeder von außen aufrufen. Die Bash Scripte kannst du außerhab der Web root ablegen.
OK, wenn man keine andere Wahl hat, dann muss das wohl so.
Gibt sicher ein paar Schutzmechanismen wie z.B. IP Check des Aufrufs oder htaccess, etc.
Auf einen reinen Namen, der nicht bekannt ist, würde ich mich nicht verlassen.
Nur falls das auch andere lesen, hat man die Möglichkeit über Bash oder direktem CLI call, dann besser immer den Weg wählen als die PHP Lösung.