Nextcloud News Feeds werden nach Servercrash nicht geupdated
Nach unvermittelten Serverneustarts beispielsweise nach einem Servercrash ergibt sich mitunter die Situation, dass der Cronjob zum Updaten der RSS-Feeds in Nextcloud News ergebnislos endet, also die Feeds nicht updated.
Das Problem liegt in der fehlenden Freigabe, da ein laufender Cronjob durch den Neustart beendet wurde. Dieser hatte den Updatejob reserviert, aber konnte ihn nicht mehr freigeben. Daher bricht jeder nachfolgende Cronjob erst einmal sicherheitshalber schon beim Start ab.
Abhilfe schafft ein Zurücksetzen des reserved_at
-Eintrags in der Datenbank. Die Einzelschrittvorgehensweise findet sich in der FAQ von Nextcloud News auf github.io. Die Chose lässt sich natürlich automatisieren. Entweder verwendet man die id
, die einem beim händischen Durchlauf ausgegeben wurde:
/usr/bin/mysql -h 127.0.0.1 -D nextcloud -u NC-USER -pNEXTCLOUDDBPASSWORT -e "SELECT * from oc_jobs WHERE class LIKE '%News%' ORDER BY id;"
und kommt damit auf diese zwei Befehle:
/usr/bin/mysql -h 127.0.0.1 -D nextcloud -u NC-USER -pNEXTCLOUDDBPASSWORT -e "UPDATE oc_jobs SET reserved_at = '0' WHERE id = IDNR1;"
/usr/bin/mysql -h 127.0.0.1 -D nextcloud -u NC-USER -pNEXTCLOUDDBPASSWORT -e "UPDATE oc_jobs SET reserved_at = '0' WHERE id = IDNR2;"
In dem Beispiel steht NC-USER
dabei für den jeweiligen Usernamen, NEXTCLOUDDBPASSWORT
für das jeweilige Passwort. Ausgegangen wird von einem 127.0.0.1
-Host, der auch localhost
sein kann.
Alternativ lässt sich auch ein Bash-Script bauen, das die id-Werte automatisch zieht und verwendet.
#!/bin/bash
RESERVED1=`mysql -h 127.0.0.1 -u NC-USER -pNEXTCLOUDDBPASSWORT -B -e "SELECT * from oc_jobs WHERE class LIKE '%News%' ORDER BY id;" nextcloud | sed -n 2p | cut -f1`
/usr/bin/mysql -h 127.0.0.1 -D nextcloud -u NC-USER -pNEXTCLOUDDBPASSWORT -B -e "UPDATE oc_jobs SET reserved_at = 0 WHERE id = '${RESERVED1}';"
RESERVED2=`mysql -h 127.0.0.1 -u NC-USER -pNEXTCLOUDDBPASSWORT -B -e "SELECT * from oc_jobs WHERE class LIKE '%News%' ORDER BY id;" nextcloud | sed -n 3p | cut -f1`
/usr/bin/mysql -h 127.0.0.1 -D nextcloud -u NC-USER -pNEXTCLOUDDBPASSWORT -B -e "UPDATE oc_jobs SET reserved_at = 0 WHERE id = '${RESERVED2}';"
Letzteres Script lässt sich dann wunderbar in /etc/rc.local
unterbringen und damit bei jedem Neustart ein Reset des Updaters veranlassen, damit die RSS-Feeds auch weiter neu geladen werden. Bei Systemd
wird /etc/rc.local
nicht mehr unbedingt automatisch gestartet. Mitunter muss das erst eingestellt werden.
Stichworte: Bash, Cronjob, Datenbanken, Nextcloud
Kategorien: Linux