Moodle/Cron: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 71: Zeile 71:


= TMP =
= TMP =
{{Installing Moodle}}
Der Moodle-"cron"-Prozess ist ein PHP-Skript (Teil der Moodle-Standardinstallation), das regelmäßig im Hintergrund ausgeführt werden muss. Das Moodle-Cron-Skript führt verschiedene Aufgaben in unterschiedlichen Zeitabständen aus.
The Moodle 'cron' process is a PHP script (part of the standard Moodle installation) that must be run regularly in the background. The Moodle cron script runs different tasks at differently scheduled intervals.


'''IMPORTANT: Do not skip setting up the cron process on your server for your Moodle. Your site will not work properly without it.'''
WICHTIG: Überspringen Sie nicht die Einrichtung des cron-Prozesses auf Ihrem Server für Ihr Moodle. Ohne ihn wird Ihre Website nicht richtig funktionieren.'''


It is recommended that ''the cron is run every minute'', as required for asynchronous activity deletion when using the [[recycle bin]].
Es wird empfohlen, ''den Cron jede Minute laufen zu lassen'', wie es für das asynchrone Löschen von Aktivitäten bei Verwendung des [[Papierkorb]]s erforderlich ist.


The cron program (that runs the Moodle script) is a core part of Unix-based systems (including Linux and OSX) being used to run all manner of time-dependent services. On Windows the simplest solution is to create a task in the Windows Task Scheduler and set it to run at regular intervals. On shared hosting, you should find the documentation (or ask support) how cron is configured. Most shared hosting systems use CPanel to manage sites, and usually will have a section for Cron Jobs on the panel.
Das cron-Programm (das das Moodle-Skript ausführt) ist ein zentraler Bestandteil von Unix-basierten Systemen (einschließlich Linux und OSX) und wird für die Ausführung aller Arten von zeitabhängigen Diensten verwendet. Unter Windows besteht die einfachste Lösung darin, eine Aufgabe im Windows-Taskplaner zu erstellen und sie in regelmäßigen Abständen auszuführen. Bei Shared Hosting sollten Sie in der Dokumentation nachsehen (oder den Support fragen), wie cron konfiguriert ist. Die meisten Shared-Hosting-Systeme verwenden CPanel zur Verwaltung von Websites und verfügen in der Regel über einen Abschnitt für Cron-Jobs im Panel.


Essentially, the task involves adding a single command to the list of cron activities on your system. On Unix based systems this list is a file called a 'crontab' which all users have.  
Im Wesentlichen besteht die Aufgabe darin, einen einzelnen Befehl zur Liste der Cron-Aktivitäten auf Ihrem System hinzuzufügen. Auf Unix-Systemen ist diese Liste eine Datei namens 'crontab', die alle Benutzer haben.  
== General discussion ==
== Allgemeine Diskussion ==
See the later sections for your server type; this section contains some general background information.  
Siehe die späteren Abschnitte für Ihren Servertyp; dieser Abschnitt enthält einige allgemeine Hintergrundinformationen.  


There are essentially two steps to implementing cron:
Bei der Implementierung von cron gibt es im Wesentlichen zwei Schritte:
# identifying the correct command to run
# Identifizierung des richtigen Befehls zur Ausführung
# finding the right place on your system to put the command
# den richtigen Ort auf Ihrem System finden, um den Befehl auszuführen
=== Working out the Moodle cron command ===
=== Ausarbeitung des Moodle cron Befehls ===
Moodle has two different ways to deploy cron which use different scripts within the Moodle install. These are as follows...
Moodle bietet zwei verschiedene Möglichkeiten, cron einzusetzen, die unterschiedliche Skripte innerhalb der Moodle-Installation verwenden. Diese sind wie folgt...
# The CLI (command line interpreter) script. This will be at the path <pre>/path/to/moodle/admin/cli/cron.php</pre> If in doubt, this is the correct script to use. This needs to be run by a 'PHP CLI' program on your computer. So the final command may look something like <pre>/usr/bin/php /path/to/moodle/admin/cli/cron.php</pre> You can (and should) try this on your command line to see if it works. '''WARNING: Check your command-line PHP version is compatible with your chosen version of Moodle. The command-line PHP program is different to the one running your web site and is not always the same version.'''
# Das CLI-Skript (Kommandozeileninterpreter). Dieses befindet sich im Pfad <pre>/path/to/moodle/admin/cli/cron.php</pre> Im Zweifelsfall ist dies das richtige Skript. Es muss von einem "PHP CLI"-Programm auf Ihrem Computer ausgeführt werden. Der endgültige Befehl könnte also etwa so aussehen: <pre>/usr/bin/php /path/to/moodle/admin/cli/cron.php</pre> Sie können (und sollten) dies auf Ihrer Kommandozeile ausprobieren, um zu sehen, ob es funktioniert. WARNUNG: Überprüfen Sie, ob die PHP-Version auf der Kommandozeile mit der von Ihnen gewählten Moodle-Version kompatibel ist. Das Kommandozeilen-PHP-Programm unterscheidet sich von dem, das auf Ihrer Website läuft, und ist nicht immer die gleiche Version.'''
# If, for some reason, you cannot run the CLI script there is the web based script. Note that this is now deprecated and may be removed in future versions. This needs to be run from a web browser and will be accessed via a web url something like '''http://your.moodle.site/admin/cron.php'''. You can find command line based web browser (e.g. wget) so the final command may look like <pre>/usr/bin/wget http://your.moodle.site/admin/cron.php</pre> This has the advantage that it can be run from *anywhere*. If you can't get cron to work on your machine it can be run somewhere else.
# Wenn Sie das CLI-Skript aus irgendeinem Grund nicht ausführen können, gibt es das webbasierte Skript. Beachten Sie, dass dieses Skript jetzt veraltet ist und in zukünftigen Versionen entfernt werden könnte. Es muss über einen Webbrowser ausgeführt werden und wird über eine Web-URL wie '''http://your.moodle.site/admin/cron.php''' aufgerufen. Es gibt auch kommandozeilenbasierte Webbrowser (z.B. wget), so dass der endgültige Befehl wie <pre>/usr/bin/wget http://your.moodle.site/admin/cron.php</pre> aussehen kann. Wenn Sie cron auf Ihrem Rechner nicht zum Laufen bekommen, können Sie es auch woanders ausführen.
===The web based Moodle cron command===
===Der webbasierte Moodle-Cron-Befehl===
* If you have a choice, do not use the web based cron. It is likely to be removed in a future Moodle version.  
* Wenn Sie die Wahl haben, verwenden Sie nicht den webbasierten Cron-Befehl. Er wird wahrscheinlich in einer zukünftigen Moodle-Version entfernt werden.  
* From Moodle 2.9 onwards, the cron job can no longer be run from web by default. You will get an error message:
* Ab Moodle 2.9 kann der Cron-Job standardmäßig nicht mehr über das Web ausgeführt werden. Sie werden eine Fehlermeldung erhalten:
  !!! Sorry, internet access to this page has been disabled by the administrator. !!!  
  !!! Sorry, der Internetzugang zu dieser Seite wurde vom Administrator gesperrt. !!!  
* You can change this in ' Dashboard ► Site administration ► Security ► Site policies ' by deselecting 'Cron execution via command line only'.
* Sie können dies unter ' Dashboard ► Site administration ► Security ► Site policies ' ändern, indem Sie die Option 'Cron execution via command line only' deaktivieren.
** You will be warned that 'Running the cron from a web browser can expose privileged information to anonymous users. Thus it is recommended to only run the cron from the command line or set a cron password for remote access.'
** Sie werden gewarnt, dass die Ausführung des Cron von einem Webbrowser aus privilegierte Informationen für anonyme Benutzer preisgeben kann. Es wird daher empfohlen, den Cron nur über die Befehlszeile auszuführen oder ein Cron-Passwort für den Fernzugriff festzulegen.'
** You can then write a 'Cron password for remote access'. If this field is left empty, no password is required.
** Sie können dann ein 'Cron-Passwort für den Fernzugriff' eingeben. Wenn Sie dieses Feld leer lassen, ist kein Passwort erforderlich.
** This means that the cron.php script cannot be run from a web browser without supplying the password using the following form of URL:
** Dies bedeutet, dass das Skript cron.php nicht von einem Webbrowser aus ausgeführt werden kann, ohne dass das Kennwort in der folgenden Form der URL angegeben wird:
   http://site.example.com/admin/cron.php?password=opensesame
   http://site.example.com/admin/cron.php?password=opensesame
=== Finding the right place to put the command ===
=== Den richtigen Ort für die Eingabe des Befehls finden ===
This really does depend on the system you are using and you should find and read the documentation for your platform or hosting. In most cases getting the Moodle cron to run consists of establishing the correct command (above) and then adding it, and the time to run the command, to some sort of file. This might be either through a specific user interface or by editing the file directly.
Dies hängt wirklich von dem System ab, das Sie verwenden, und Sie sollten die Dokumentation für Ihre Plattform oder Ihr Hosting finden und lesen. In den meisten Fällen besteht die Ausführung von Moodle cron darin, dass Sie den richtigen Befehl (siehe oben) festlegen und ihn dann zusammen mit der Zeit, zu der der Befehl ausgeführt werden soll, in eine Art Datei eintragen. Dies kann entweder über eine spezielle Benutzeroberfläche oder durch direkte Bearbeitung der Datei geschehen.


If using the CLI version you also need to make sure that the cron process is run as the correct user. This is not an issue with the web version.  
Wenn Sie die CLI-Version verwenden, müssen Sie auch sicherstellen, dass der Cron-Prozess als der richtige Benutzer ausgeführt wird. Dies ist bei der Web-Version nicht der Fall.  


Example... installing cron on Ubuntu/Debian Linux. Assuming logged in as root..
Beispiel... Installation von cron auf Ubuntu/Debian Linux. Angenommen, Sie sind als root eingeloggt...


''use the crontab command to open a crontab editor window for the www-data user. This is the user that Apache (the web server) runs as on Debian based systems''
Verwenden Sie den Befehl crontab, um ein Crontab-Editorfenster für den Benutzer www-data zu öffnen. Dies ist der Benutzer, unter dem Apache (der Webserver) auf Debian-basierten Systemen läuft''
<pre>
<pre>
$ crontab -u www-data -e
$ crontab -u www-data -e
</pre>
</pre>
''This will open an editor window. To run the cli cron script every 1 minute, add the line:''
''Dadurch wird ein Editorfenster geöffnet. Um das cli cron-Skript alle 1 Minute laufen zu lassen, fügen Sie die Zeile:''
<pre>
<pre>
* * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php >/dev/null
* * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php >/dev/null
</pre>
</pre>
NOTE: the final '''>/dev/null''' sends all the output to the 'bin' and stops you getting an email every 1 minute.
HINWEIS: Das abschließende '''>/dev/null''' sendet alle Ausgaben in den 'bin' und verhindert, dass Sie alle 1 Minute eine E-Mail erhalten.
== Setting up cron on your system ==
== cron auf Ihrem System einrichten ==
Choose the information for your server type:
Wählen Sie die Informationen für Ihren Servertyp aus:
*[[Cron with Unix or Linux]]- Cron services on various UNIX and Linux flavored operating systems.
*[[Cron mit Unix oder Linux]]- Cron-Dienste auf verschiedenen UNIX- und Linux-Betriebssystemen.
*[[Cron with Windows OS]] - Cron services in Windows
*[[Cron unter Windows OS]] - Cron-Dienste unter Windows
*''Apple OSX'' - use the built-in 'crontab' service which is exactly the same as [[Cron with Unix or Linux]]. However, you might want to do it the 'Apple way' using launchd - see [[Cron with MAC OS X]]
*''Apple OSX''' - verwenden Sie den eingebauten Dienst 'crontab', der genau dasselbe ist wie [[Cron unter Unix oder Linux]]. Vielleicht möchten Sie es aber auch auf die 'Apple-Art' mit launchd machen - siehe [[Cron mit MAC OS X]]
*[[Cron with web hosting services]]- Cron services in various web hosting examples.
*[[Cron mit Webhosting-Diensten]]- Cron-Dienste in verschiedenen Webhosting-Beispielen.
Here are some more instructions for specific hosts (please check that these are up to date):
Hier sind einige weitere Anleitungen für bestimmte Hosts (bitte prüfen Sie, ob diese aktuell sind):
*[[Cron on 1and1 shared servers]]
*[[Cron auf 1und1 shared servers]]
== Using third party cron service ==
== Verwendung eines Cron-Dienstes eines Drittanbieters ==
Besides using cron hosted on your own server, you may use third party cron service (usually called webcron):
Neben der Verwendung von Cron, das auf Ihrem eigenen Server gehostet wird, können Sie auch Cron-Dienste von Drittanbietern verwenden (normalerweise webcron genannt):
*[https://cron-job.org/ cron-job.org] is a free service. (1Minute cron is possible)
*[https://cron-job.org/ cron-job.org] ist ein kostenloser Dienst. (1Minute cron ist möglich)


*[https://www.easycron.com EasyCron] - A webcron service provider that eliminates the need of crontab or other task schedulers to set cron job.
*[https://www.easycron.com EasyCron] - Ein Webcron-Dienstleister, der die Notwendigkeit von crontab oder anderen Aufgabenplanern zum Einrichten von Cron-Jobs eliminiert.


*[https://webcron.talent-factory.ch/ WebCron] - A free and easy webcron service provider.
*[https://webcron.talent-factory.ch/ WebCron] - Ein kostenloser und einfacher Webcron-Dienstleister.
=== Cron settings in Moodle ===
=== Cron-Einstellungen in Moodle ===
An admin can set cron execution via command line only or a cron password for remote access in 'Site security settings' in the Site administration.
Ein Administrator kann die Cron-Ausführung nur über die Kommandozeile oder ein Cron-Passwort für den Fernzugriff in den "Sicherheitseinstellungen" der Website-Administration einstellen.
===Remote cron===
===Ferngesteuerter Cron===
Using the 'web based' version of cron it is perfectly ok to place the cron process on a different machine to the Moodle server. For example, the cron service on a Unix server can invoke the cron web 'page' on a Windows-based Moodle server.
Mit der 'webbasierten' Version von cron ist es völlig in Ordnung, den cron-Prozess auf einem anderen Rechner als dem Moodle-Server zu platzieren. Zum Beispiel kann der cron-Dienst auf einem Unix-Server die cron-Webseite auf einem Windows-basierten Moodle-Server aufrufen.
==Scheduling tasks==
==Planen von Aufgaben==
An administrator can schedule cron tasks very precisely from Administration > Site administration > Server > Scheduled tasks, see [[Scheduled tasks]]
Ein Administrator kann Cron-Aufgaben unter Administration > Website-Verwaltung > Server > Geplante Aufgaben sehr genau planen, siehe [[Geplante Aufgaben]]
==Running cron for several Moodle servers==
==Cron für mehrere Moodle-Server laufen lassen==
* Tasks can run in parallel and processes use locking to prevent tasks from running at the same time which allows cron to be triggered from multiple web servers that serve the same Moodle instance.
* Die Aufgaben können parallel laufen und die Prozesse verwenden Sperren, um zu verhindern, dass Aufgaben zur gleichen Zeit laufen, was es ermöglicht, Cron von mehreren Webservern aus zu starten, die dieselbe Moodle-Instanz bedienen.


* If you are running different Moodle instances on the same server, then each Moodle instance needs a cron job. (Even a single Apache web server can run different Moodle instances on different domains by using its virtual hosts capability [https://httpd.apache.org/docs/2.2/vhosts/index.html https://httpd.apache.org/docs/2.2/vhosts/index.html].)
* Wenn Sie verschiedene Moodle-Instanzen auf demselben Server betreiben, dann benötigt jede Moodle-Instanz einen Cron-Job. (Sogar ein einzelner Apache-Webserver kann verschiedene Moodle-Instanzen auf verschiedenen Domains laufen lassen, indem er seine Fähigkeit zu virtuellen Hosts nutzt [https://httpd.apache.org/docs/2.2/vhosts/index.html https://httpd.apache.org/docs/2.2/vhosts/index.html].)
== Debugging Scheduled Tasks ==
== Fehlersuche bei geplanten Tasks ==
Sometimes, a particular cron task may not be working correctly. In Moodle versions before 2.7 - any cron task that was throwing exceptions would prevent the rest of cron from running. The only way to monitor if cron was completing each time, was to add some automated checking of the output of running cron (e.g. searching for the string "Cron completed at ").
Manchmal kann es vorkommen, dass eine bestimmte Cron-Aufgabe nicht richtig funktioniert. In Moodle-Versionen vor 2.7 hat jede Cron-Aufgabe, die Ausnahmen auslöste, den Rest der Cron-Aufgabe am Laufen gehindert. Die einzige Möglichkeit zu überwachen, ob Cron jedes Mal abgeschlossen wurde, war eine automatische Überprüfung der Ausgabe von Cron (z.B. die Suche nach der Zeichenkette "Cron completed at ").


In Moodle 2.7 and later, a single failing scheduled task will not prevent the remaining tasks from completing. When any single scheduled task fails, it is marked as a failure, and scheduled to be reattempted. If the task keeps failing, the next scheduled time will be backed off until it is attempted at most once every 24 hours. But checking the [[Scheduled tasks]] admin page, you can see if any task is currently failing (it will have a non-zero fail delay - which is the number of seconds to wait before reattempting a failed task). A simple way to debug a failing task, is to run it immediately using the [[Administration via command line#Scheduled tasks|cli scheduled task runner]] and monitor the output.
In Moodle 2.7 und höher verhindert eine einzelne fehlgeschlagene geplante Aufgabe nicht die Fertigstellung der übrigen Aufgaben. Wenn eine einzelne geplante Aufgabe fehlschlägt, wird sie als Fehlschlag markiert und für einen erneuten Versuch eingeplant. Wenn die Aufgabe immer wieder fehlschlägt, wird die nächste geplante Zeit verschoben, bis sie höchstens einmal alle 24 Stunden versucht wird. Auf der [[Geplante Aufgaben]]-Verwaltungsseite können Sie jedoch sehen, ob eine Aufgabe gerade fehlschlägt (sie hat eine Fehlschlagverzögerung ungleich Null - das ist die Anzahl der Sekunden, die gewartet wird, bevor eine fehlgeschlagene Aufgabe erneut versucht wird). Eine einfache Möglichkeit, eine fehlgeschlagene Aufgabe zu debuggen, besteht darin, sie sofort mit dem [[Verwaltung über die Kommandozeile#Geplante Aufgaben|cli scheduled task runner]] auszuführen und die Ausgabe zu überwachen.
== Logging and monitoring ==
== Protokollierung und Überwachung ==
Ideally you should also be logging the output of cron somewhere and monitoring it for issues. You can monitor the overall status of cron to make sure there are no errors by visiting:
Idealerweise sollten Sie auch die Ausgabe von cron irgendwo protokollieren und auf Probleme hin überwachen. Sie können den Gesamtstatus von cron überwachen, um sicherzustellen, dass keine Fehler vorliegen, indem Sie Folgendes besuchen:


Site administration / Reports / System status (/report/status/index.php)
Website-Verwaltung / Berichte / Systemstatus (/report/status/index.php)


You can also wire this status report up to tools like Icinga / Nagios using the Check API (https://docs.moodle.org/dev/Check_API) cli commands or with the help of plugins like https://github.com/catalyst/moodle-tool_heartbeat.
Sie können diesen Statusbericht auch mit Tools wie Icinga / Nagios verbinden, indem Sie die Check API (https://docs.moodle.org/dev/Check_API) cli-Befehle verwenden oder mit Hilfe von Plugins wie https://github.com/catalyst/moodle-tool_heartbeat.


<code sh>
<code sh>
Zeile 156: Zeile 155:
</code>
</code>


If there are errors then you can get more details for recently run tasks from the Logs column on the Scheduled task page, but this won't show ad hoc task failures:
Wenn Fehler auftreten, können Sie weitere Details zu kürzlich ausgeführten Tasks in der Spalte "Logs" auf der Seite "Geplante Tasks" abrufen, allerdings werden dort keine Fehler bei Ad-hoc-Tasks angezeigt:


Site administration / Server / Tasks / Scheduled tasks (/admin/tool/task/scheduledtasks.php)
Website-Verwaltung / Server / Aufgaben / Geplante Aufgaben (/admin/tool/task/scheduledtasks.php)


To see ad hoc task failures you either need to rerun the task manually yourself and see the errors, or you need to have already collected the logs for review. For a Moodle running on a single box you could log to a simple log file, or for a cluster you might want to use syslogd or similar, e.g.:
Um Fehlschläge von Ad-hoc-Aufgaben zu sehen, müssen Sie die Aufgabe entweder selbst manuell ausführen und die Fehler sehen, oder Sie müssen die Logs bereits zur Überprüfung gesammelt haben. Für ein Moodle, das auf einem einzelnen Rechner läuft, könnte man in eine einfache Logdatei protokollieren, oder für einen Cluster könnte man syslogd oder ähnliches verwenden, z.B.:
<pre>
<pre>
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php 2>&1 | /usr/bin/logger ...
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php 2>&1 | /usr/bin/logger ...
</pre>
</pre>
== Low latency adhoc tasks ==
== Adhoc-Aufgaben mit geringer Latenz ==
Each time cron is run, after the scheduled tasks the ad hoc tasks are also run. While scheduled tasks can run at most once a minute, ad hoc tasks can be queued at any moment, and generally you want them processed as soon as possible and to not have to wait for the scheduled task to run first. If you only run the normal admin/cli/cron.php then not only might it have to wait to process all the scheduled tasks first, if it has already finished you will have to wait until the next minute for cron to start again for it to be processed.
Jedes Mal, wenn cron ausgeführt wird, werden nach den geplanten Aufgaben auch die Ad-hoc-Aufgaben ausgeführt. Während geplante Aufgaben höchstens einmal pro Minute ausgeführt werden können, können Ad-hoc-Aufgaben jederzeit in eine Warteschlange gestellt werden, und im Allgemeinen möchten Sie, dass sie so schnell wie möglich verarbeitet werden und nicht erst auf die geplante Aufgabe warten müssen. Wenn Sie nur die normale admin/cli/cron.php ausführen, kann es sein, dass sie nicht nur warten muss, um alle geplanten Aufgaben zuerst zu bearbeiten, sondern dass Sie, wenn sie bereits beendet ist, bis zur nächsten Minute warten müssen, bis cron erneut startet, um sie zu bearbeiten.


Instead you can run one or more dedicated ad hoc task processors which run in parallel to the main cron process.
Stattdessen können Sie einen oder mehrere spezielle Ad-hoc-Aufgabenprozessoren laufen lassen, die parallel zum Hauptprozess von cron laufen.
<pre>
<pre>
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
...
...
</pre>
</pre>
Starting from Moodle 3.9 the—keep-alive option runs like a daemon so when the queue is empty rather than exiting it waits for new tasks to be queued so it can start processing as soon as possible.
Ab Moodle 3.9 wird die Option-keep-alive wie ein Daemon ausgeführt, d.h. wenn die Warteschlange leer ist, wird sie nicht beendet, sondern wartet darauf, dass neue Aufgaben in die Warteschlange gestellt werden, damit sie so bald wie möglich mit der Bearbeitung beginnen kann.
== Scaling up cron with multiple processes ==
== Cron mit mehreren Prozessen skalieren ==
As your site grows many of the scheduled tasks will take longer to complete, and also there will be more ad hoc tasks queued which need to be processed. The cron system is designed to work in parallel but each individual process can only process one task at a time so you must run multiple cron cli's. You can generally run a fairly high number of cron processes on a dedicated cron instance before needing to run multiple cron instances. To run more than one process simply spawn multiple cron processes each minute:
Wenn Ihre Website wächst, werden viele der geplanten Aufgaben länger dauern, und es werden auch mehr Ad-hoc-Aufgaben in der Warteschlange stehen, die bearbeitet werden müssen. Das Cron-System ist so konzipiert, dass es parallel arbeitet, aber jeder einzelne Prozess kann nur eine Aufgabe zur gleichen Zeit bearbeiten, so dass Sie mehrere Cron-Kli's laufen lassen müssen. Sie können im Allgemeinen eine ziemlich große Anzahl von Cron-Prozessen auf einer dedizierten Cron-Instanz laufen lassen, bevor Sie mehrere Cron-Instanzen laufen lassen müssen. Um mehr als einen Prozess laufen zu lassen, starten Sie einfach jede Minute mehrere Cron-Prozesse:


  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php
  * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php
  * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php
  ⋮
  ⋮
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
  ⋮
  ⋮


It can be especially important to increase the number of adhoc_task.php processes as certain plugins and systems can generate very large numbers of ad hoc tasks, or tasks that can take a long time to process. Especially tasks like document conversions and automated backups can build up more quickly than they are processed if they are left on default settings.
Es kann besonders wichtig sein, die Anzahl der adhoc_task.php-Prozesse zu erhöhen, da bestimmte Plugins und Systeme eine sehr große Anzahl von Ad-hoc-Aufgaben oder Aufgaben erzeugen können, deren Bearbeitung viel Zeit in Anspruch nehmen kann. Insbesondere Aufgaben wie Dokumentenkonvertierungen und automatisierte Backups können sich schneller ansammeln als sie bearbeitet werden, wenn sie auf den Standardeinstellungen belassen werden.


By default only 3 scheduled tasks and 3 ad hoc tasks can be run concurrently so as you add more processes you need to increase the level of allowed concurrency:
Standardmäßig können nur 3 geplante Aufgaben und 3 Ad-hoc-Aufgaben gleichzeitig ausgeführt werden. Wenn Sie weitere Prozesse hinzufügen, müssen Sie die zulässige Gleichzeitigkeit erhöhen:


Site administration > Server > Tasks > Task processing
Site-Administration > Server > Tasks > Task-Verarbeitung


Or in <code>config.php</code>:
Oder in <code>config.php</code>:


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$CFG->task_scheduled_concurrency_limit = 20; // Defaults to 3
$CFG->task_scheduled_concurrency_limit = 20; // Standardwert ist 3
$CFG->task_adhoc_concurrency_limit = 50; // Defaults to 3
$CFG->Aufgabe_adhoc_Währungsbeschränkung = 50; // Standardmäßig 3
</syntaxhighlight>
</syntaxhighlight>


Whatever you set these to make sure the server(s) hosting them can comfortably handle this many processes. Often the bottleneck will be a shared service, usually the database.
Wie auch immer Sie diese Werte setzen, stellen Sie sicher, dass der/die Server, die sie hosten, diese Anzahl von Prozessen bequem verarbeiten können. Oft ist der Engpass ein gemeinsam genutzter Dienst, normalerweise die Datenbank.


You may find that certain types of very long running tasks will consume all the available task processes which means no other tasks will run. e.g. if you have 5 cli processes, but in the task queue there are 20 ad hoc tasks for an automated backup, each of which will take ten minutes to complete, then very quickly all 5 processes will be consumed by backups and nothing else. Other small very fast and light tasks like a document conversion or forum emails will not get sent until the backups are complete and a process frees up. To manage this you can limit the concurrency of specific types of ad hoc tasks. A good rule of thumb is that if all of the 'heavy' tasks consume all of their own limits then you should still have another few processes standing by on idle waiting for anything else which may be added to the queue.
Es kann vorkommen, dass bestimmte Arten von sehr lang laufenden Aufgaben alle verfügbaren Aufgabenprozesse aufbrauchen, was bedeutet, dass keine anderen Aufgaben ausgeführt werden können. Wenn Sie z. B. 5 Cli-Prozesse haben, aber in der Aufgabenwarteschlange 20 Ad-hoc-Aufgaben für eine automatische Sicherung stehen, von denen jede zehn Minuten dauert, dann werden sehr schnell alle 5 Prozesse von den Sicherungen aufgebraucht und nichts anderes. Andere kleine, sehr schnelle und leichte Aufgaben wie eine Dokumentenkonvertierung oder Foren-E-Mails werden nicht gesendet, bis die Backups abgeschlossen sind und ein Prozess frei wird. Um dies zu steuern, können Sie die Gleichzeitigkeit bestimmter Arten von Ad-hoc-Aufgaben begrenzen. Eine gute Faustregel ist, dass Sie, wenn alle "schweren" Aufgaben ihre eigenen Limits ausschöpfen, immer noch ein paar andere Prozesse im Leerlauf haben sollten, die auf alles andere warten, was der Warteschlange hinzugefügt werden könnte.


Automated backups are the worst known offender, so hypothetically if you are running 50 ad hoc task processes concurrently a reasonable restriction might be to cap the backups to consume no more than half of those processes, i.e. 25 at most:
Automated backups are the worst known offender, so hypothetically if you are running 50 ad hoc task processes concurrently a reasonable restriction might be to cap the backups to consume no more than half of those processes, i.e. 25 at most:

Version vom 17. Juli 2023, 11:39 Uhr

Cron-Job einrichten

Einige Module von Moodle prüfen regelmäßig, ob bestimmte Aufgaben ausgeführt werden müssen. Moodle überprüft z.B. ob es im Forum neue Einträge gibt, die per Email an Nutzer versandt werden müssen.

Das Skript, das all diese Vorgänge steuert, finden Sie im Admin-Verzeichnis und heißt cron.php. Diese Datei läuft nicht von alleine. Sie müssen einen Mechanismus einrichten, der die Datei z.B. alle fünf Minuten ausführt. Dazu ist es erforderlich, dass ein "Impuls" für jedes Modul ausgelöst wird.

Der Auslöser dieses Impulses muss nicht von dem Server erfolgen auf dem Moodle installiert ist.. Wenn Sie auf diesem Server keine Cron-Jobs ausführen können, kann dies von einem anderen Server ausgelöst oder von Ihrem PC gestartet werden. Es ist lediglich nötig, die Datei cron.php alle fünf Minuten aufzurufen.

Testen Sie zuerst, ob die Datei funktioniert. Rufen Sie sie mit Ihrem Browser auf:

http://example.com/moodle/admin/cron.php

Nehmen Sie nun einige Einstellungen vor:

Aufruf des Skripts von der Kommandozeile

Rufen Sie die Datei wie zuvor auf. Nehmen Sie dazu z.B. den Unix-Befehl 'wget':

wget -q -O /dev/null http://example.com/moodle/admin/cron.php

In diesem Beispiel wird das Ergebnis abgelegt (nach /dev/null).

Das gleiche mit lynx:

lynx -dump http://example.com/moodle/admin/cron.php > /dev/null

Alternativ können Sie eine separate PHP-Version nutzen, die über die Kommandozeile gesteuert wird. Der Vorteil dieser Variante ist, dass in den Log-Dateien des Web-Servers der Aufruf von cron.php nicht ständig protokolliert wird. Der Nachteil dieser Variante besteht darin, dass Sie einen Zugang zur Kommando-Zeile der PHP-Version benötigen.

/opt/bin/php /web/moodle/admin/cron.php

(Windows) C:\apache\php\php.exe C:\apache\htdocs\moodle\admin\cron.php

Automatische Ausführung des Skripts alle 5 Minuten

Bei UNIX- Systemen: Use cron. Passen Sie ihre Einstellungen für Cron- Jobs über die Komandozeile mit folgendem Befehl an "crontab -e" und fügen Sie folgende Zeile hinzu:

*/5 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php

Bei Windows-Systemen: Der einfachste Weg ist hier mein Programm zu benutzen, moodle-cron-for-windows.zip wodurch die Anpassungen ganz einfach sind. Sie können alternativ dazu, die in Windows enthaltene Funktion "Scheduled Tasks" benutzen.

Bei Web Hosting Services

Die Oberflächedes Web Host Services bietet Ihnen die Möglichkeit, einen Cron Job einzurichten. Z.B. Cpanel Systeme: Hier gibt es einen Button "Cron jobs". Geben Sie hier die folgenden Unix-Befehle ein.

Kommando-Zeile von Unix nutzen

Es gibt verschiedene Kommandozeilenprogramme, die Sie aufrufen können. Auf Ihrem Server sind vielleicht nicht alle verfügbar.

Z.B. das Unix-Utility 'wget':

wget -q -O /dev/null http://example.com/moodle/admin/cron.php

In diesem Beispiel wird das Ergebnis nicht aufgewahrt (to /dev/null).

Das gleiche unter lynx:

lynx -dump http://example.com/moodle/admin/cron.php > /dev/null

Alternativ können sie eine standalone version von PHP nutzen, die kompiliert in der Kommandozeile läuft. The advantage with doing this is that your web server logs aren't filled with constant requests to cron.php. The disadvantage is that you need to have access to a command-line version of php.

/opt/bin/php /web/moodle/admin/cron.php   

Verwendung des crontab Programms auf Unix

All that Cpanel does is provide a web interface to a Unix utility known as crontab. If you have a command line, you can set up crontab yourself using the command:

crontab -e

and then adding one of the above commands like:

*/5 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php

Usually, the "crontab" command will put you into the 'vi' editor. You enter "insert mode" by pressing "i", then type in the line as above, then exit insert mode by pressing ESC. You save and exit by typing ":wq", or quit without saving using ":q!" (without the quotes).

TMP

Der Moodle-"cron"-Prozess ist ein PHP-Skript (Teil der Moodle-Standardinstallation), das regelmäßig im Hintergrund ausgeführt werden muss. Das Moodle-Cron-Skript führt verschiedene Aufgaben in unterschiedlichen Zeitabständen aus.

WICHTIG: Überspringen Sie nicht die Einrichtung des cron-Prozesses auf Ihrem Server für Ihr Moodle. Ohne ihn wird Ihre Website nicht richtig funktionieren.

Es wird empfohlen, den Cron jede Minute laufen zu lassen, wie es für das asynchrone Löschen von Aktivitäten bei Verwendung des Papierkorbs erforderlich ist.

Das cron-Programm (das das Moodle-Skript ausführt) ist ein zentraler Bestandteil von Unix-basierten Systemen (einschließlich Linux und OSX) und wird für die Ausführung aller Arten von zeitabhängigen Diensten verwendet. Unter Windows besteht die einfachste Lösung darin, eine Aufgabe im Windows-Taskplaner zu erstellen und sie in regelmäßigen Abständen auszuführen. Bei Shared Hosting sollten Sie in der Dokumentation nachsehen (oder den Support fragen), wie cron konfiguriert ist. Die meisten Shared-Hosting-Systeme verwenden CPanel zur Verwaltung von Websites und verfügen in der Regel über einen Abschnitt für Cron-Jobs im Panel.

Im Wesentlichen besteht die Aufgabe darin, einen einzelnen Befehl zur Liste der Cron-Aktivitäten auf Ihrem System hinzuzufügen. Auf Unix-Systemen ist diese Liste eine Datei namens 'crontab', die alle Benutzer haben.

Allgemeine Diskussion

Siehe die späteren Abschnitte für Ihren Servertyp; dieser Abschnitt enthält einige allgemeine Hintergrundinformationen.

Bei der Implementierung von cron gibt es im Wesentlichen zwei Schritte:

  1. Identifizierung des richtigen Befehls zur Ausführung
  2. den richtigen Ort auf Ihrem System finden, um den Befehl auszuführen

Ausarbeitung des Moodle cron Befehls

Moodle bietet zwei verschiedene Möglichkeiten, cron einzusetzen, die unterschiedliche Skripte innerhalb der Moodle-Installation verwenden. Diese sind wie folgt...

  1. Das CLI-Skript (Kommandozeileninterpreter). Dieses befindet sich im Pfad
    /path/to/moodle/admin/cli/cron.php
    Im Zweifelsfall ist dies das richtige Skript. Es muss von einem "PHP CLI"-Programm auf Ihrem Computer ausgeführt werden. Der endgültige Befehl könnte also etwa so aussehen:
    /usr/bin/php /path/to/moodle/admin/cli/cron.php
    Sie können (und sollten) dies auf Ihrer Kommandozeile ausprobieren, um zu sehen, ob es funktioniert. WARNUNG: Überprüfen Sie, ob die PHP-Version auf der Kommandozeile mit der von Ihnen gewählten Moodle-Version kompatibel ist. Das Kommandozeilen-PHP-Programm unterscheidet sich von dem, das auf Ihrer Website läuft, und ist nicht immer die gleiche Version.
  2. Wenn Sie das CLI-Skript aus irgendeinem Grund nicht ausführen können, gibt es das webbasierte Skript. Beachten Sie, dass dieses Skript jetzt veraltet ist und in zukünftigen Versionen entfernt werden könnte. Es muss über einen Webbrowser ausgeführt werden und wird über eine Web-URL wie http://your.moodle.site/admin/cron.php aufgerufen. Es gibt auch kommandozeilenbasierte Webbrowser (z.B. wget), so dass der endgültige Befehl wie
    /usr/bin/wget http://your.moodle.site/admin/cron.php
    aussehen kann. Wenn Sie cron auf Ihrem Rechner nicht zum Laufen bekommen, können Sie es auch woanders ausführen.

Der webbasierte Moodle-Cron-Befehl

  • Wenn Sie die Wahl haben, verwenden Sie nicht den webbasierten Cron-Befehl. Er wird wahrscheinlich in einer zukünftigen Moodle-Version entfernt werden.
  • Ab Moodle 2.9 kann der Cron-Job standardmäßig nicht mehr über das Web ausgeführt werden. Sie werden eine Fehlermeldung erhalten:
!!! Sorry, der Internetzugang zu dieser Seite wurde vom Administrator gesperrt. !!! 
  • Sie können dies unter ' Dashboard ► Site administration ► Security ► Site policies ' ändern, indem Sie die Option 'Cron execution via command line only' deaktivieren.
    • Sie werden gewarnt, dass die Ausführung des Cron von einem Webbrowser aus privilegierte Informationen für anonyme Benutzer preisgeben kann. Es wird daher empfohlen, den Cron nur über die Befehlszeile auszuführen oder ein Cron-Passwort für den Fernzugriff festzulegen.'
    • Sie können dann ein 'Cron-Passwort für den Fernzugriff' eingeben. Wenn Sie dieses Feld leer lassen, ist kein Passwort erforderlich.
    • Dies bedeutet, dass das Skript cron.php nicht von einem Webbrowser aus ausgeführt werden kann, ohne dass das Kennwort in der folgenden Form der URL angegeben wird:
 http://site.example.com/admin/cron.php?password=opensesame

Den richtigen Ort für die Eingabe des Befehls finden

Dies hängt wirklich von dem System ab, das Sie verwenden, und Sie sollten die Dokumentation für Ihre Plattform oder Ihr Hosting finden und lesen. In den meisten Fällen besteht die Ausführung von Moodle cron darin, dass Sie den richtigen Befehl (siehe oben) festlegen und ihn dann zusammen mit der Zeit, zu der der Befehl ausgeführt werden soll, in eine Art Datei eintragen. Dies kann entweder über eine spezielle Benutzeroberfläche oder durch direkte Bearbeitung der Datei geschehen.

Wenn Sie die CLI-Version verwenden, müssen Sie auch sicherstellen, dass der Cron-Prozess als der richtige Benutzer ausgeführt wird. Dies ist bei der Web-Version nicht der Fall.

Beispiel... Installation von cron auf Ubuntu/Debian Linux. Angenommen, Sie sind als root eingeloggt...

Verwenden Sie den Befehl crontab, um ein Crontab-Editorfenster für den Benutzer www-data zu öffnen. Dies ist der Benutzer, unter dem Apache (der Webserver) auf Debian-basierten Systemen läuft

$ crontab -u www-data -e

Dadurch wird ein Editorfenster geöffnet. Um das cli cron-Skript alle 1 Minute laufen zu lassen, fügen Sie die Zeile:

* * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php >/dev/null

HINWEIS: Das abschließende >/dev/null sendet alle Ausgaben in den 'bin' und verhindert, dass Sie alle 1 Minute eine E-Mail erhalten.

cron auf Ihrem System einrichten

Wählen Sie die Informationen für Ihren Servertyp aus:

Hier sind einige weitere Anleitungen für bestimmte Hosts (bitte prüfen Sie, ob diese aktuell sind):

Verwendung eines Cron-Dienstes eines Drittanbieters

Neben der Verwendung von Cron, das auf Ihrem eigenen Server gehostet wird, können Sie auch Cron-Dienste von Drittanbietern verwenden (normalerweise webcron genannt):

  • cron-job.org ist ein kostenloser Dienst. (1Minute cron ist möglich)
  • EasyCron - Ein Webcron-Dienstleister, der die Notwendigkeit von crontab oder anderen Aufgabenplanern zum Einrichten von Cron-Jobs eliminiert.
  • WebCron - Ein kostenloser und einfacher Webcron-Dienstleister.

Cron-Einstellungen in Moodle

Ein Administrator kann die Cron-Ausführung nur über die Kommandozeile oder ein Cron-Passwort für den Fernzugriff in den "Sicherheitseinstellungen" der Website-Administration einstellen.

Ferngesteuerter Cron

Mit der 'webbasierten' Version von cron ist es völlig in Ordnung, den cron-Prozess auf einem anderen Rechner als dem Moodle-Server zu platzieren. Zum Beispiel kann der cron-Dienst auf einem Unix-Server die cron-Webseite auf einem Windows-basierten Moodle-Server aufrufen.

Planen von Aufgaben

Ein Administrator kann Cron-Aufgaben unter Administration > Website-Verwaltung > Server > Geplante Aufgaben sehr genau planen, siehe Geplante Aufgaben

Cron für mehrere Moodle-Server laufen lassen

  • Die Aufgaben können parallel laufen und die Prozesse verwenden Sperren, um zu verhindern, dass Aufgaben zur gleichen Zeit laufen, was es ermöglicht, Cron von mehreren Webservern aus zu starten, die dieselbe Moodle-Instanz bedienen.
  • Wenn Sie verschiedene Moodle-Instanzen auf demselben Server betreiben, dann benötigt jede Moodle-Instanz einen Cron-Job. (Sogar ein einzelner Apache-Webserver kann verschiedene Moodle-Instanzen auf verschiedenen Domains laufen lassen, indem er seine Fähigkeit zu virtuellen Hosts nutzt https://httpd.apache.org/docs/2.2/vhosts/index.html.)

Fehlersuche bei geplanten Tasks

Manchmal kann es vorkommen, dass eine bestimmte Cron-Aufgabe nicht richtig funktioniert. In Moodle-Versionen vor 2.7 hat jede Cron-Aufgabe, die Ausnahmen auslöste, den Rest der Cron-Aufgabe am Laufen gehindert. Die einzige Möglichkeit zu überwachen, ob Cron jedes Mal abgeschlossen wurde, war eine automatische Überprüfung der Ausgabe von Cron (z.B. die Suche nach der Zeichenkette "Cron completed at ").

In Moodle 2.7 und höher verhindert eine einzelne fehlgeschlagene geplante Aufgabe nicht die Fertigstellung der übrigen Aufgaben. Wenn eine einzelne geplante Aufgabe fehlschlägt, wird sie als Fehlschlag markiert und für einen erneuten Versuch eingeplant. Wenn die Aufgabe immer wieder fehlschlägt, wird die nächste geplante Zeit verschoben, bis sie höchstens einmal alle 24 Stunden versucht wird. Auf der Geplante Aufgaben-Verwaltungsseite können Sie jedoch sehen, ob eine Aufgabe gerade fehlschlägt (sie hat eine Fehlschlagverzögerung ungleich Null - das ist die Anzahl der Sekunden, die gewartet wird, bevor eine fehlgeschlagene Aufgabe erneut versucht wird). Eine einfache Möglichkeit, eine fehlgeschlagene Aufgabe zu debuggen, besteht darin, sie sofort mit dem cli scheduled task runner auszuführen und die Ausgabe zu überwachen.

Protokollierung und Überwachung

Idealerweise sollten Sie auch die Ausgabe von cron irgendwo protokollieren und auf Probleme hin überwachen. Sie können den Gesamtstatus von cron überwachen, um sicherzustellen, dass keine Fehler vorliegen, indem Sie Folgendes besuchen:

Website-Verwaltung / Berichte / Systemstatus (/report/status/index.php)

Sie können diesen Statusbericht auch mit Tools wie Icinga / Nagios verbinden, indem Sie die Check API (https://docs.moodle.org/dev/Check_API) cli-Befehle verwenden oder mit Hilfe von Plugins wie https://github.com/catalyst/moodle-tool_heartbeat.

/admin/cli/checks.php

Wenn Fehler auftreten, können Sie weitere Details zu kürzlich ausgeführten Tasks in der Spalte "Logs" auf der Seite "Geplante Tasks" abrufen, allerdings werden dort keine Fehler bei Ad-hoc-Tasks angezeigt:

Website-Verwaltung / Server / Aufgaben / Geplante Aufgaben (/admin/tool/task/scheduledtasks.php)

Um Fehlschläge von Ad-hoc-Aufgaben zu sehen, müssen Sie die Aufgabe entweder selbst manuell ausführen und die Fehler sehen, oder Sie müssen die Logs bereits zur Überprüfung gesammelt haben. Für ein Moodle, das auf einem einzelnen Rechner läuft, könnte man in eine einfache Logdatei protokollieren, oder für einen Cluster könnte man syslogd oder ähnliches verwenden, z.B.:

 * * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php 2>&1 | /usr/bin/logger ...

Adhoc-Aufgaben mit geringer Latenz

Jedes Mal, wenn cron ausgeführt wird, werden nach den geplanten Aufgaben auch die Ad-hoc-Aufgaben ausgeführt. Während geplante Aufgaben höchstens einmal pro Minute ausgeführt werden können, können Ad-hoc-Aufgaben jederzeit in eine Warteschlange gestellt werden, und im Allgemeinen möchten Sie, dass sie so schnell wie möglich verarbeitet werden und nicht erst auf die geplante Aufgabe warten müssen. Wenn Sie nur die normale admin/cli/cron.php ausführen, kann es sein, dass sie nicht nur warten muss, um alle geplanten Aufgaben zuerst zu bearbeiten, sondern dass Sie, wenn sie bereits beendet ist, bis zur nächsten Minute warten müssen, bis cron erneut startet, um sie zu bearbeiten.

Stattdessen können Sie einen oder mehrere spezielle Ad-hoc-Aufgabenprozessoren laufen lassen, die parallel zum Hauptprozess von cron laufen.

 * * * * * /usr/bin/php /path/to/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
 * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
...

Ab Moodle 3.9 wird die Option-keep-alive wie ein Daemon ausgeführt, d.h. wenn die Warteschlange leer ist, wird sie nicht beendet, sondern wartet darauf, dass neue Aufgaben in die Warteschlange gestellt werden, damit sie so bald wie möglich mit der Bearbeitung beginnen kann.

Cron mit mehreren Prozessen skalieren

Wenn Ihre Website wächst, werden viele der geplanten Aufgaben länger dauern, und es werden auch mehr Ad-hoc-Aufgaben in der Warteschlange stehen, die bearbeitet werden müssen. Das Cron-System ist so konzipiert, dass es parallel arbeitet, aber jeder einzelne Prozess kann nur eine Aufgabe zur gleichen Zeit bearbeiten, so dass Sie mehrere Cron-Kli's laufen lassen müssen. Sie können im Allgemeinen eine ziemlich große Anzahl von Cron-Prozessen auf einer dedizierten Cron-Instanz laufen lassen, bevor Sie mehrere Cron-Instanzen laufen lassen müssen. Um mehr als einen Prozess laufen zu lassen, starten Sie einfach jede Minute mehrere Cron-Prozesse:

* * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php
* * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php * * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php
* * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/cron.php
⋮
* * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
* * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
* * * * * /usr/bin/php /pfad/zu/moodle/admin/cli/adhoc_task.php --execute --keep-alive=59
⋮

Es kann besonders wichtig sein, die Anzahl der adhoc_task.php-Prozesse zu erhöhen, da bestimmte Plugins und Systeme eine sehr große Anzahl von Ad-hoc-Aufgaben oder Aufgaben erzeugen können, deren Bearbeitung viel Zeit in Anspruch nehmen kann. Insbesondere Aufgaben wie Dokumentenkonvertierungen und automatisierte Backups können sich schneller ansammeln als sie bearbeitet werden, wenn sie auf den Standardeinstellungen belassen werden.

Standardmäßig können nur 3 geplante Aufgaben und 3 Ad-hoc-Aufgaben gleichzeitig ausgeführt werden. Wenn Sie weitere Prozesse hinzufügen, müssen Sie die zulässige Gleichzeitigkeit erhöhen:

Site-Administration > Server > Tasks > Task-Verarbeitung

Oder in config.php:

$CFG->task_scheduled_concurrency_limit = 20; // Standardwert ist 3
$CFG->Aufgabe_adhoc_Währungsbeschränkung = 50; // Standardmäßig 3

Wie auch immer Sie diese Werte setzen, stellen Sie sicher, dass der/die Server, die sie hosten, diese Anzahl von Prozessen bequem verarbeiten können. Oft ist der Engpass ein gemeinsam genutzter Dienst, normalerweise die Datenbank.

Es kann vorkommen, dass bestimmte Arten von sehr lang laufenden Aufgaben alle verfügbaren Aufgabenprozesse aufbrauchen, was bedeutet, dass keine anderen Aufgaben ausgeführt werden können. Wenn Sie z. B. 5 Cli-Prozesse haben, aber in der Aufgabenwarteschlange 20 Ad-hoc-Aufgaben für eine automatische Sicherung stehen, von denen jede zehn Minuten dauert, dann werden sehr schnell alle 5 Prozesse von den Sicherungen aufgebraucht und nichts anderes. Andere kleine, sehr schnelle und leichte Aufgaben wie eine Dokumentenkonvertierung oder Foren-E-Mails werden nicht gesendet, bis die Backups abgeschlossen sind und ein Prozess frei wird. Um dies zu steuern, können Sie die Gleichzeitigkeit bestimmter Arten von Ad-hoc-Aufgaben begrenzen. Eine gute Faustregel ist, dass Sie, wenn alle "schweren" Aufgaben ihre eigenen Limits ausschöpfen, immer noch ein paar andere Prozesse im Leerlauf haben sollten, die auf alles andere warten, was der Warteschlange hinzugefügt werden könnte.

Automated backups are the worst known offender, so hypothetically if you are running 50 ad hoc task processes concurrently a reasonable restriction might be to cap the backups to consume no more than half of those processes, i.e. 25 at most:

In config.php:

$CFG->task_concurrency_limit = [
    'core\task\course_backup_task' => 25,
    'core_course\task\course_delete_modules' => 5,
];

See also

Forum discussions: