Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

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: , , ,
Kategorien:


Kommentare

Keine Kommentare

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.