Cpulimit für PHP-Prozess Preview-Generator

Hallo zusammen,
ich setze auf einem Odroid HC2 die aktuelle Version von Armbian auf Basis von Debian Stretch ein.
Unter Anderem nutze ich auf dem HC2 Nextcloud um z.B. meine Fotos auszulagern.
Um Previews von hochgeladenen Bildern erstellen zu lassen, nutze ich das Preview-Generator AddIn von Nextcloud, welches diese Aufgabe im Hintergrund als Cronjob ausführt.

Nun zu meinem eigentlich Problem:
Leider unterstützt PHP ja kein Multithreading und somit ist einer der 8 Kerne der HC2 für eine laaange Zeit zu 100% mit der Preview-Generation ausgelastet. Dies führt dazu, dass der Server bei zusätzlichen Aufgaben/Zugriffen früher als später in die Knie geht und abstürzt.

Nun bin ich auf das Tool cpulimit gestoßen, mit welchen ich ich die CPU-Last auf 50% reduziert habe - dies scheint soweit zu funktionieren. Die CPU überhitzt nicht und der Server kann noch weitere Tasks ausführen.

Mir ist jedoch aufgefallen, dass CPU-Limit nur funktioniert, wenn ich explizit die Prozess-ID angebe, was jedoch nicht viel Sinn macht, da es sich ja um einen Cronjob handelt und die ID sich ändern kann, wenn der Prozess sich beendet und wieder neu startet.

sudo cpulimit -p 1234 -l 50 -b
funktioniert

sudo cpulimit -P /usr/bin/php -l 50 -b
funktioniert nicht

sudo cpulimit -P /var/www/nextcloud/occ -l 50 -b
funktioniert ebenfalls nicht

Der Cronjob wird wie folgt aufgerufen:

*/15 * * * * php /var/www/nextcloud/occ preview:pre-generate

Wie stelle ich es an, dass der entsprechende Cronjob immer limitiert wird?

Danke!

Philipp

Auf der Manpage zu cpulimit ist noch eine zusätzliche Syntax zum direkten Aufruf des zu limitierenden Prozesses erwähnt:
*/15 * * * * cpulimit -l 50 -bz -- php /var/www/nextcloud/occ preview:pre-generate
Dieser Cronjob startet nun den PHP-Prozess mit einem Limit von 50%.
Vielleicht für den ein oder anderen ebenfalls interessant :slight_smile: