Friendica Worker - Vom CRON zum Daemon
Die Worker in Friendica sorgen dafür, dass Nachrichten ausgeliefert und Nachrichten abgeholt werden. Es gibt verschiedene Wege, diese zu konfigurieren, da es auch die unterschiedlichsten Serverumgebungen gibt.
- Folgende flexible Möglichkeiten bietet Friendica
- Worker werden regelmäßig über CRON gestartet
- Worker werden über einen externen CRON Dienst aufgerufen
- Worker werden durch den Aufruf der Friendica Seiten gestartet (Frontendworker)
- Worker werden von einem eigenen System Daemon (bin/daemon.php) aufgerufen
Generell werden Worker Aufgaben priorisiert (Nachrichten ausliefern/abholen, Aktualisieren von Kontakten, usw). Dazu kann man dann noch einen sogenannten “Fastlane” Worker aktivieren, der dafür sorgt, dass Prozesse mit höherer Priorität nicht von Prozessen niedriger Priorität blockiert werden. Insgesammt ein sehr ausgeklügeltes System.
Bisher hatte ich meine Worker durch einem CRON Job konfiguriert. Da aber bei einer aktuellen Friendica Konfiguration die Verwendung von bin/daemon.php
als Systemservice empfohlen wird.
Der Webserver läuft unter dem Benutzer www-data
und braucht daher auch die entsprechende Berechtigung bei CRON oder später bei der daemon.php indem man den aktuellen Benutzer ersetzt mit sudo -u www-data <Befehl>
. In diesem Artikel arbeite ich als root
Benutzer.
Zuerst den CRON Service deaktivieren. mit sudo -u www-data crontab -e
die CRON Konfiguration aufrufen und mit einem #
den entsprechenden Eintrag erstmal auskommentieren. Danach CRON neu starten mit `sudo service cron restart
` . Wenn alles eine Weile läuft, dann kann man die auskommentierte Zeile dann auch entfernen. Ich belasse solche Konfigurationen einfach zur Sicherheit immer noch eine Weile, um unter Umständen recht schnell den ursprünglichen Zustand wieder herstellen zu können.
In der Datei config/local.config.php
muss in der Sektion ‘system
’ ein Eintrag 'pidfile' => '/path/to/daemon.pid'
, erstellt werden. Diese Datei habe ich ausserhalb des Webverzeichnisses in einem eigenen Verzeichnis erstellt.
'system' => [
'default_timezone' => 'UTC',
'language' => 'de',
'worker_jpm' => 'true',
...
...
'pidfile' => '/Path/to/pid/daemon.pid',
.....
Schliesslich kann man von Hand den Daemon aus dem Friendica Basisverzeichnis starten mit sudo -u www-data bin/daemon.php start
starten.
Wenn das alles geklappt hat, dann sollte mandaemon.php
noch als System Service einrichten, so dass der Daemon bei jedem Systemneustarte automatisch mitgestartet wird.
# Contents of /etc/systemd/system/friendicaworkerdaemon.service
[Unit]
Description=Friendica Worker Daemon
After=network.target
[Service]
Type=simple
Restart=always
User=www-data
Group=www-data
WorkingDirectory=/Pfad/zum/Friendica/Basisverzeichnis/
ExecStart=/usr/bin/php bin/daemon.php start
[Install]
WantedBy=multi-user.target
Schliesslich stoppen wir den daemon.php
wieder von Hand im Friendica Basisverzeichnis mit sudo -u www-data bin/daemon.php stop
Dann wird systemd Daemon angewiesen alle Konfigurationsdateien neu einzulesensystemctl daemon-reload
Der friendicaworkerdaemon Service wird aktiviertsystemctl enable friendicaworkerdaemon.service
Und nun wird der friendicaworkerdaemon Service gestartetsystemctl start friendicaworkerdaemon.service
Wenn alles geklappt hat, dann meldet sich die Eingabeaufforderung wieder, ohne einen Fehler anzuzeigen.
Falls bei der Überprüfung mit systemctl status friendicaworker.service
der Fehler error starting start-limit-hit
kommt, dann hilft meist der Befehl systemctl reset-failed friendicaworker.service
und danach wieder ein systemctl start friendicaworker.service
. Danach kann man nochmal den Status überprüfen.

1 Kommentar
5 Stern: | (1) | |
---|---|---|
4 Stern: | (0) | |
3 Stern: | (0) | |
2 Stern: | (0) | |
1 Stern: | (0) | |
(5.0)
Kommentar von: Marco [Besucher]
In der Service-Datei sollte
[Service]
Type=simple
durch
[Service]
Type=forking
werden laut https://unix.stackexchange.com/questions/513972/how-to-fix-start-limit-hit-trying-to-start-gunicorn-on-ubuntu-18. Sonst wird immer wieder der Neustart versucht trotz laufendem Child-Prozess.