Pentru ca joburile de fundal Nextcloud să ruleze automat cu systemd, configurați un serviciu one-shot care rulează cron.phpca utilizator al serverului web, apoi activați un cronometru care pornește acel serviciu la fiecare cinci minute. Verificările cheie sunt: cronometrul este activat și are o oră de execuție următoare, serviciul indică căile corecte Nextcloud și PHP, iar jurnalul serviciului arată o ieșire reușită. Un serviciu one-shot poate afișa „inactiv (mort)” între execuții; acest lucru poate fi normal după ce se termină.
Această configurație este pentru o instalare convențională Nextcloud pe Ubuntu folosind systemd, cu fișierele Nextcloud disponibile pe gazdă. Dacă Nextcloud rulează în Docker, Snap sau un dispozitiv precum Nextcloud All-in-One, utilizați metoda de planificare documentată a distribuției respective în loc să indicați o unitate gazdă către o cale exclusivă de container. Exemplele de mai jos utilizează /var/www/nextcloudși www-data; înlocuiți-le cu calea de instalare reală și utilizatorul HTTP de pe serverul dvs.
Ce ar trebui să realizeze cronometrul
Nextcloud cron.phprulează activități în fundal puse în coadă, cum ar fi mentenanța și sarcinile aplicației. Cronometrul systemd este ceasul; serviciul este comanda care rulează atunci când cronometrul expiră. Aveți nevoie de ambele. Crearea fișierelor fără activarea cronometrului lasă programul inactiv, în timp ce activarea unui cronometru care indică o cale PHP sau Nextcloud greșită poate produce rulări eșuate repetate.
Nextcloud recomandă cronul de sistem pentru joburile de fundal de producție. Manualul său actual de administrare documentează, de asemenea, cronometrele systemd ca alternativă. Exemplul de programare începe la cinci minute după pornire și apoi programează o altă rulare la cinci minute după fiecare activare a serviciului. Se evită dependența de un utilizator care vizitează interfața web.
1. Confirmați calea de instalare, utilizatorul și interfața CLI PHP
Înainte de a edita unitățile, localizați directorul Nextcloud propriu-zis și verificați ce comandă PHP este așteptată de instalarea serverului web. Într-o instalare tipică de arhivă Ubuntu, calea poate fi /var/www/nextcloud, utilizatorul web este adesea www-data, iar PHP CLI este /usr/bin/php. Verificați în loc să presupuneți:
ls -l /var/www/nextcloud/cron.php
command -v php
php -v
Dacă directorul Nextcloud se află în altă parte, înlocuiți directorul respectiv în ambele comenzi unit de mai jos. Dacă serverul web folosește o versiune separată de PHP, utilizați executabilul CLI al acelei versiuni în ExecStartși ExecCondition. Un serviciu systemd nu moștenește CALEA sau mediul shell-ului interactiv, deci căile explicite sunt mai fiabile.
Testați verificarea stării sub același utilizator pe care îl va folosi systemd:
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e
Comanda Nextcloud occar trebui să ruleze ca utilizator HTTP pentru a păstra proprietatea și permisiunile corecte ale fișierelor. Dacă acest test raportează o eroare PHP, un mod de întreținere sau un fișier lipsă, remediați mai întâi acest lucru; cronometrul nu poate compensa o comandă Nextcloud eșuată.
2. Creați serviciul unic
Creați /etc/systemd/system/nextcloudcron.service:
sudo nano /etc/systemd/system/nextcloudcron.service
Introduceți această unitate, ajustând calea și utilizatorul dacă instalarea dvs. diferă:
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
ExecConditionverifică dacă Nextcloud funcționează normal înainte de a lansa jobul în fundal. Dacă condiția eșuează, systemd omite rularea; inspectați jurnalul pentru a afla de ce. KillMode=processpermite programelor externe pornite de un job în fundal să continue după încheierea procesului cron principal. Exemplul actual de Nextcloud nu necesită o [Install]secțiune în acest fișier de serviciu.
Utilizarea /usr/bin/phpeste potrivită doar atunci când acesta este interpretorul CLI corect pe serverul dvs. De exemplu, un depozit PHP personalizat poate instala un binar versionat. Folosiți aceeași versiune PHP compatibilă pe care o necesită Nextcloud și pe care o utilizează configurația serverului său web.
3. Creați cronometrul
Creați /etc/systemd/system/nextcloudcron.timer:
sudo nano /etc/systemd/system/nextcloudcron.timer
Adăuga:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
OnBootSecprogramează prima rulare la cinci minute după ce systemd pornește la bootare. OnUnitActiveSecprogramează o altă rulare la cinci minute după ce serviciul a fost activat ultima dată. Cronometrul nu este același cu serviciul: activați și porniți unitatea .timerpentru ca programarea să ruleze automat.
4. Reîncărcați systemd și activați cronometrul
Cereți systemd să citească noile fișiere unitare, apoi activați și porniți cronometrul într-o singură comandă:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
Verificați cronometrul:
systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron
Cronometrul ar trebui să fie încărcat și activ și list-timersar trebui să afișeze un moment viitor în secțiunea URMĂTOR. Dacă este dezactivat, nu este încărcat sau nu are o activare următoare, confirmați că numele fișierului se termină în .timer, [Install]secțiunea conține WantedBy=timers.targetși ați rulat daemon-reloaddupă salvarea fișierelor.
5. Rulați un test și inspectați rezultatul acestuia
Puteți lansa serviciul o singură dată fără a aștepta următoarea bifare a cronometrului:
sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager
Căutați rezultatul serviciului și orice erori PHP sau Nextcloud. După finalizarea comenzii, nextcloudcron.serviceeste posibil să reveniți la inactive (dead)deoarece este o sarcină unică. Asta nu înseamnă că a eșuat. Cronometrul ar trebui să rămână activ și să programeze următoarea rulare; jurnalul ar trebui să arate dacă rularea anterioară s-a încheiat cu succes.
În setările de administrare Nextcloud, deschideți zona de stare a jobului în fundal și confirmați că ora de execuție a ultimului job avansează după declanșarea temporizatorului. Avertismentul general ar trebui să dispară atunci când Nextcloud detectează activitate recentă în fundal. Așteptați cel puțin un interval după activarea temporizatorului înainte de a decide că programul nu a rulat.
Diagnosticați tiparele comune de defecțiuni
| Ceea ce vezi | Ce să verificați | Următorul pas |
| Cronometrul este „inactiv” sau dezactivat | Dacă unitatea temporizatorului a fost activată și pornită | Execută sudo systemctl enable --now nextcloudcron.timer, apoi verificăsystemctl list-timers |
| Cronometrul este activ, dar serviciul eșuează | Jurnalul de servicii, executabilul PHP, calea Nextcloud și utilizatorul serviciului | Rulați testul de stare ca www-data; remediați prima eroare PHP sau de permisiune a fișierelor raportată |
| Serviciul este inactiv între rulări | Următoarea oră a cronometrului și ultima intrare în jurnal a serviciului | Dacă serviciul s-a încheiat cu succes și cronometrul rămâne activ, acest lucru este normal pentru o unitate cu o singură utilizare. |
Serviciul se închide fără a rulacron.php | Rezultatul ExecConditionși dacă Nextcloud este în modul de întreținere | Rezolvați condiția de eșec și verificați starea Nextcloud înainte de a reporni manual jobul. |
| Pagina de administrare încă raportează că cron-ul nu a rulat. | Dacă serviciul invocă într-adevăr instanța corectă și dacă ultima sa oră de execuție se modifică | Așteptați un interval de temporizator, verificați jurnalele și verificați dacă verificați aceeași instalare Nextcloud |
Pentru mai multe detalii, consultați jurnalele de servicii recente și fișierul jurnal Nextcloud:
sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list
Lista de joburi afișează lucrările înregistrate, dar nu este în sine o dovadă că temporizatorul se execută. Folosește împreună ultima și următoarea activare a temporizatorului, jurnalul de servicii și indicatorul de ultima execuție al Nextcloud.
Când să utilizați un alt planificator
Temporizatoarele Systemd funcționează bine atunci când serverul rulează systemd și doriți o programare locală, gestionată de servicii. Dacă deja utilizați un daemon cron standard și puteți verifica crontab-ul acestuia, este acceptată și o intrare cron de sistem care apelează același cod cron.phpca www-data. Nu programați ambele metode pentru aceeași instanță Nextcloud; apelurile care se suprapun pot irosi resurse și pot complica depanarea.
Programarea AJAX depinde de utilizatorii care vizitează Nextcloud și este mai puțin fiabilă pentru un server aglomerat sau cu mai mulți utilizatori. Webcron apelează cron.phpprin HTTP și poate fi potrivit pentru o instanță foarte mică în care accesul la sistem nu este disponibil, dar Nextcloud notează că execuția web limitează cantitatea de lucru care poate fi executată per apel. Dacă Nextcloud este containerizat sau gestionat de un dispozitiv, utilizați planificatorul sau configurația containerului acceptată; un serviciu gazdă care utilizează /var/www/nextcloudnu va funcționa dacă acea cale nu este prezentă pe gazdă.
O configurație sănătoasă are un cronometru activat cu o oră NEXT recurentă, rulări de servicii care se finalizează fără erori PHP și o oră de execuție a ultimei runde Nextcloud care avansează. Dacă toate cele trei sunt adevărate, dar o anumită sarcină a aplicației pare în continuare întârziată, este posibil ca planificatorul să funcționeze în timp ce jobul respectiv așteaptă propria programare, fereastră de întreținere sau condiții de coadă. Diagnosticați acel job separat înainte de a modifica intervalul cronometrului.
Referințe oficiale