Als de beheerderspagina van ownCloud meldt dat er geen achtergrondtaken worden uitgevoerd, kan het zijn dat geplande opschoontaken en andere geplande werkzaamheden vertraging oplopen totdat iemand de site bezoekt. Configureer op een Linux-server die wordt beheerd door systemd de ownCloud-achtergrondtaakmodus voor Cron en gebruik een timer die wordt uitgevoerd occ system:cronals het webserveraccount. De huidige documentatie van ownCloud Server beveelt systeemcron aan voor reguliere achtergrondtaken en noemt specifiek systemd-timers als een andere manier om opdrachten in te plannen.
Deze handleiding is bedoeld voor ownCloud Server Classic, rechtstreeks geïnstalleerd op een Linux-host. Hij is niet van toepassing op ownCloud Infinite Scale, dat een andere architectuur heeft, of op de officiële ownCloud Docker-image, die intern al cron uitvoert. Volg voor Docker de gedocumenteerde instellingen van de image in plaats van een tweede hosttimer aan te maken. Zie de actuele documentatie over achtergrondtaken voor ownCloud Server .
Controleer de opdracht voordat u het schema wijzigt.
Een systemd -service definieert de uit te voeren opdracht; een timer start die service periodiek. Controleer eerst het installatiepad van ownCloud en het HTTP-serveraccount. De onderstaande voorbeelden gebruiken /var/www/ownclouden www-data, wat gebruikelijk is op Debian en Ubuntu. Andere Linux-distributies gebruiken mogelijk wwwrun, apacheof een ander account.
Voer de ownCloud-opdracht handmatig uit als dat account om een defecte opdracht te onderscheiden van een defecte planning:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
Wijzig het PHP-uitvoerbestand en het pad zodat deze occovereenkomen met uw server. ownCloud raadt aan om te gebruiken system:cronvoor achtergrondtaken; oudere handleidingen voor het plannen van taken cron.phpkunnen verwijzen naar verouderd gedrag. Een lopende opdracht kan worden voltooid zonder een succesbericht weer te geven, dus controleer de exitstatus echo $?direct daarna met: 0betekent dat de opdracht succesvol is afgesloten. Als er een fout wordt geretourneerd, corrigeer dan eerst het pad, de PHP CLI-installatie, de machtigingen, de databaseverbinding of de ownCloud-fout. De timer zal dezelfde mislukte opdracht herhaaldelijk uitvoeren als u deze controle overslaat.
Stel ownCloud in op de Cron-modus.
Open in de beheerdersinstellingen van ownCloud het gedeelte 'achtergrondtaken' of 'Cron' en kies 'Cron' . Je kunt de planner ook instellen vanuit de installatiemap met:
cd /var/www/owncloud
sudo -E -u www-data php occ background:cron
Hiermee wordt de Cron-modus geselecteerd; de geplande opdracht blijft behouden occ system:cron. De handleiding van ownCloud zegt dat deze opdracht gelijk is aan het selecteren van Cron op de beheerderspagina. Cron heeft de voorkeur voor een server die taken betrouwbaar moet verwerken, omdat AJAX afhankelijk is van paginabezoeken en taken tijdens rustige perioden kan laten wachten. Voor een kleine, persoonlijke instantie is AJAX wellicht eenvoudiger, maar minder voorspelbaar.
Maak de systemd-service en timer aan.
Maak een account aan /etc/systemd/system/owncloudcron.servicemet uw daadwerkelijke HTTP-account en het ownCloud-pad:
[Unit]
Description=ownCloud background jobs
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/var/www/owncloud
ExecStart=/usr/bin/php -f /var/www/owncloud/occ system:cron
Type=oneshotVertelt systemd dat de opdracht volledig is uitgevoerd en vervolgens afsluit. Door het volledige PHP-pad op te geven, wordt de afhankelijkheid van de beperkte paden PATHdie beschikbaar zijn voor systeemservices vermeden. De werkmap helpt ownCloud bij het oplossen van relatieve paden. Zorg ervoor dat het serviceaccount overeenkomt met de eigenaar van de ownCloud-bestanden en de toegang tot de gegevens. Voer de taak niet uit als root.
Maak vervolgens het volgende aan /etc/systemd/system/owncloudcron.timer:
[Unit]
Description=Run ownCloud background jobs every 15 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=15min
Unit=owncloudcron.service
[Install]
WantedBy=timers.target
De handleiding van ownCloud adviseert een interval van 15 minuten voor het standaard cron-voorbeeld en erkent systemd-timers als een alternatieve planner. Deze timer start vijf minuten na het opstarten en plant vervolgens verdere uitvoeringen 15 minuten nadat de service is geactiveerd. Als uw workload een ander interval vereist, pas dit dan OnUnitActiveSecbewust aan en houd rekening met de tijd die elke uitvoering nodig heeft om te voltooien. Vermijd het configureren van een tweede crontab-item voor hetzelfde commando; dubbele planners kunnen leiden tot overbodige uitvoeringen en het oplossen van problemen bemoeilijken.
Geef systemd de opdracht om de eenheidsdefinities opnieuw te laden en schakel vervolgens de timer in en start deze:
sudo systemctl daemon-reload
sudo systemctl enable --now owncloudcron.timer
daemon-reloadDit is vereist na het aanmaken of bewerken van unit-bestanden. Door de timer in te schakelen, start deze automatisch na toekomstige opstartmomenten; anders --nowstart deze in de huidige sessie. Schakel de timer-unit in, niet alleen de service.
Ontdek waarom een run is overgeslagen of mislukt.
Controleer of de timer is ingeschakeld en wanneer deze de volgende keer moet worden uitgevoerd:
systemctl is-enabled owncloudcron.timer
systemctl list-timers --all owncloudcron.timer
systemctl status owncloudcron.timer
Een ingeschakelde timer zou in de timerlijst moeten verschijnen met een volgende activering. Als dit niet het geval is, controleer dan de bestandsnaam van de unit, herlaad systemd en schakel de timer opnieuw in. Als de timer een uitvoering aangeeft, maar ownCloud-taken nog steeds vertraagd zijn, controleer dan de service en de bijbehorende logbestanden.
systemctl status owncloudcron.service
sudo journalctl -u owncloudcron.service --since today
Zoek naar een onjuist pad, een ontoegankelijke gegevensmap, een ontbrekende PHP-extensie of een databasefout. Test de exacte opdracht in het servicebestand handmatig om www-datade omgeving zo nauwkeurig mogelijk na te bootsen. Controleer ook of u de `ownCloud`-opdracht hebt gebruikt occ system:cronin plaats van een Nextcloud-voorbeeld te kopiëren dat `.` aanroept cron.php.
Controleer of ownCloud taken verwerkt.
Controleer na één of twee timerintervallen of de service succesvol is voltooid en of de timer een latere activering heeft gepland. Controleer vervolgens de status van de achtergrondtaak op de ownCloud-beheerpagina. De weergegeven tijd van de laatste uitvoering zou moeten oplopen en een waarschuwing voor een verouderde Cron-taak zou moeten verdwijnen. Als systemd succes meldt, maar de waarschuwing blijft bestaan, controleer dan het toepassingslogboek van ownCloud en controleer of de webinterface is verbonden met dezelfde instantie en database als de installatie via de commandoregel.
Installeer deze host-units niet voor officiële ownCloud-containers, tenzij u de interne scheduler van de container opzettelijk hebt uitgeschakeld en de huidige documentatie van ownCloud uw configuratie ondersteunt. De hier beschreven configuratie is een oplossing op hostniveau voor de klassieke ownCloud op systemd; servicenamen, paden, PHP-versies en het gedrag van de container zijn afhankelijk van de implementatie.