Solucione el problema de Nextcloud Cron Jobs que no se ejecuta automáticamente con systemd.

Para que las tareas en segundo plano de Nextcloud se ejecuten automáticamente con systemd, configure un servicio de ejecución única que se ejecute cron.phpcomo el usuario del servidor web y, a continuación, habilite un temporizador que inicie dicho servicio cada cinco minutos. Las comprobaciones clave son: que el temporizador esté habilitado y tenga una hora de ejecución programada, que el servicio apunte a las rutas correctas de Nextcloud y PHP, y que el registro del servicio muestre una salida exitosa. Un servicio de ejecución única puede aparecer como "inactivo (muerto)" entre ejecuciones; esto puede ser normal una vez que finaliza.

Esta configuración es para una instalación convencional de Nextcloud en Ubuntu usando systemd, con los archivos de Nextcloud disponibles en el host. Si Nextcloud se ejecuta dentro de Docker, Snap o un dispositivo como Nextcloud All-in-One, use el método de programación documentado de esa distribución en lugar de apuntar una unidad host a una ruta exclusiva del contenedor. Los ejemplos a continuación usan /var/www/nextcloudy www-data; reemplácelos con la ruta de instalación real y el usuario HTTP en su servidor.

Lo que el temporizador debería lograr

Nextcloud cron.phpejecuta tareas en segundo plano en cola, como mantenimiento y tareas de la aplicación. El temporizador de systemd es el reloj; el servicio es el comando que se ejecuta cuando finaliza el temporizador. Necesitas ambos. Crear los archivos sin habilitar el temporizador deja la programación inactiva, mientras que habilitar un temporizador que apunte a una ruta incorrecta de PHP o Nextcloud puede provocar fallos repetidos en la ejecución.

Nextcloud recomienda usar cron del sistema para las tareas en segundo plano en producción. Su manual de administración actual también documenta los temporizadores de systemd como alternativa. El ejemplo de programación se inicia cinco minutos después del arranque y luego programa otra ejecución cinco minutos después de cada activación del servicio. Esto evita que el usuario tenga que acceder a la interfaz web.

1. Confirme la ruta de instalación, el usuario y la interfaz de línea de comandos de PHP.

Antes de editar las unidades, localice el directorio real de Nextcloud y compruebe qué comando PHP espera la instalación del servidor web. En una instalación típica de archivo Ubuntu, la ruta puede ser /var/www/nextcloud, el usuario web suele ser www-datay la CLI de PHP es /usr/bin/php. Verifique en lugar de asumir:

ls -l /var/www/nextcloud/cron.php
command -v php
php -v

Si su directorio de Nextcloud se encuentra en otra ubicación, sustitúyalo en ambos comandos de unidad a continuación. Si el servidor web utiliza una versión de PHP diferente, utilice el ejecutable CLI de esa versión en ExecStarty ExecCondition. Un servicio systemd no hereda la variable PATH ni el entorno del intérprete de comandos interactivo, por lo que las rutas explícitas son más fiables.

Pruebe la comprobación de estado con el mismo usuario que utilizará systemd:

sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e

El comando de Nextcloud occdebe ejecutarse como usuario HTTP para preservar la propiedad y los permisos correctos de los archivos. Si esta prueba informa un error de PHP, modo de mantenimiento o un archivo faltante, corríjalo primero; el temporizador no puede compensar un comando de Nextcloud que falle.

2. Crear el servicio de un solo uso

Crear /etc/systemd/system/nextcloudcron.service:

sudo nano /etc/systemd/system/nextcloudcron.service

Ingrese a esta unidad, ajustando la ruta y el usuario si su instalación es diferente:

[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

ExecConditionComprueba si Nextcloud funciona correctamente antes de ejecutar la tarea en segundo plano. Si la condición falla, systemd omite la ejecución; consulte el registro para saber el motivo. KillMode=processPermite que los programas externos iniciados por una tarea en segundo plano continúen después de que finalice el proceso cron principal. El ejemplo actual de Nextcloud no requiere una [Install]sección en este archivo de servicio.

Su uso /usr/bin/phpsolo es apropiado si se trata del intérprete de línea de comandos correcto en su servidor. Por ejemplo, un repositorio PHP personalizado puede instalar un binario con versión específica. Utilice la misma versión de PHP compatible que requiere Nextcloud y que utiliza la configuración de su servidor web.

3. Crea el temporizador

Crear /etc/systemd/system/nextcloudcron.timer:

sudo nano /etc/systemd/system/nextcloudcron.timer

Agregar:

[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

OnBootSecPrograma la primera ejecución cinco minutos después de que systemd se inicie al arrancar el sistema. OnUnitActiveSecPrograma otra ejecución cinco minutos después de la última activación del servicio. El temporizador no es lo mismo que el servicio: habilite e inicie la .timerunidad para que la programación se ejecute automáticamente.

4. Reinicie systemd y habilite el temporizador.

Pídele a systemd que lea los nuevos archivos de unidad y, a continuación, habilita e inicia el temporizador con un solo comando:

sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer

Comprueba el temporizador:

systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron

El temporizador debe estar cargado y activo, y list-timersdebe mostrar una hora futura debajo de SIGUIENTE. Si está deshabilitado, no está cargado o no tiene activación siguiente, confirme que el nombre del archivo termina en .timer, la [Install]sección contiene WantedBy=timers.targety ejecutó daemon-reloaddespués de guardar los archivos.

5. Ejecuta una prueba e inspecciona su resultado.

Puedes iniciar el servicio una vez sin esperar al siguiente ciclo del temporizador:

sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager

Busque el resultado del servicio y cualquier error de PHP o Nextcloud. Una vez finalizado el comando, nextcloudcron.servicees posible que regrese a la inactive (dead)pantalla anterior, ya que se trata de una tarea única. Esto no significa necesariamente que haya fallado. El temporizador debería permanecer activo y programar la siguiente ejecución; el registro debería mostrar si la ejecución anterior finalizó correctamente.

En la configuración de administración de Nextcloud, abra el área de estado de trabajos en segundo plano y confirme que la hora de ejecución del último trabajo avanza después de que se active el temporizador. La advertencia general debería desaparecer cuando Nextcloud detecte actividad reciente en segundo plano. Espere al menos un intervalo después de activar el temporizador antes de considerar que la programación no se ha ejecutado.

Diagnosticar los patrones de falla comunes

Lo que vesQué comprobarSiguiente paso
El temporizador está “inactivo” o deshabilitado.Si la unidad de temporizador estaba habilitada y en marcha.Ejecuta sudo systemctl enable --now nextcloudcron.timery luego verifica.systemctl list-timers
El temporizador está activo, pero el servicio falla.El registro del servicio, el ejecutable PHP, la ruta de Nextcloud y el usuario del servicio.Ejecuta la prueba de estado como www-data; corrige el primer error de PHP o de permisos de archivo reportado.
El servicio está inactivo entre ejecuciones.La siguiente hora del temporizador y la última entrada del registro del servicio.Si el servicio finalizó correctamente y el temporizador permanece activo, esto es normal para una unidad de un solo uso.
El servicio finaliza sin ejecutarsecron.phpEl ExecConditionresultado y si Nextcloud está en modo de mantenimientoResuelva el fallo de condición y compruebe el estado de Nextcloud antes de iniciar la tarea manualmente de nuevo.
La página de administración sigue indicando que cron no se ha ejecutado.Si el servicio realmente invoca la instancia correcta y si cambia su último tiempo de ejecuciónEspere a que transcurra el intervalo de tiempo establecido, revise los registros y verifique que está comprobando la misma instalación de Nextcloud.

Para obtener más detalles, revise los registros de servicio recientes y el archivo de registro de 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

La lista de tareas muestra el trabajo registrado, pero por sí sola no demuestra que el temporizador se esté ejecutando. Utilice conjuntamente la hora de la última y la próxima activación del temporizador, el registro de servicio y el indicador de última ejecución de Nextcloud.

Cuándo usar un planificador diferente

Los temporizadores de Systemd funcionan bien cuando el servidor ejecuta systemd y se desea una programación local gestionada por el servicio. Si ya se utiliza un demonio cron estándar y se puede verificar su crontab, también se admite una entrada de cron del sistema que realice la misma llamada cron.php. www-dataNo se deben programar ambos métodos para la misma instancia de Nextcloud; las invocaciones superpuestas pueden desperdiciar recursos y complicar la resolución de problemas.

La programación de AJAX depende de que los usuarios visiten Nextcloud y es menos fiable para un servidor con mucha actividad o multiusuario. Las llamadas de Webcron se realizan cron.phpa través de HTTP y pueden ser adecuadas para una instancia muy pequeña donde no se dispone de acceso al sistema, pero Nextcloud advierte que la ejecución web limita la cantidad de trabajo que se puede realizar por llamada. Si Nextcloud está en un contenedor o gestionado por un dispositivo, utilice su programador o configuración de contenedor compatible; un servicio de host que utilice /var/www/nextcloudno funcionará si esa ruta no está presente en el host.

Una configuración correcta incluye un temporizador habilitado con una hora de inicio recurrente, ejecuciones de servicio que finalizan sin errores de PHP y una hora de última ejecución de Nextcloud que avanza. Si se cumplen estas tres condiciones, pero una tarea específica de la aplicación sigue apareciendo retrasada, es posible que el planificador esté trabajando mientras esa tarea espera su propia programación, ventana de mantenimiento o condiciones de cola. Diagnostique esa tarea por separado antes de modificar el intervalo del temporizador.

Referencias oficiales

Dejar un comentario

Cómo configurar un servidor Matrix Coturn TURN/STUN para llamadas de audio y vídeo

Cómo configurar un servidor Matrix Coturn TURN/STUN para llamadas de audio y vídeo

Configura Coturn con Synapse para llamadas Matrix WebRTC. Configura las credenciales compartidas, NAT, puertos del firewall, opciones TLS y distingue entre TURN heredado, MatrixRTC y LiveKit.

Cómo configurar la aplicación de correo de Nextcloud con autenticación OAuth2

Cómo configurar la aplicación de correo de Nextcloud con autenticación OAuth2

Configura Nextcloud Mail con OAuth2 para Gmail o Microsoft 365, verifica el acceso IMAP/SMTP, soluciona problemas de redireccionamiento y conoce los límites.

Cómo solucionar la advertencia de sesión "No se puede verificar la identidad" en Element

Cómo solucionar la advertencia de sesión "No se puede verificar la identidad" en Element

Solucione el problema de la advertencia de sesión "No se puede verificar la identidad" de Element verificándola con otro dispositivo de confianza o una clave de recuperación, y aprenda cuándo es seguro restablecer la configuración.

Migrar buzones de correo de Kopano a Grommunio o Zammad: Elija la ruta correcta

Migrar buzones de correo de Kopano a Grommunio o Zammad: Elija la ruta correcta

Compara la migración de Kopano con la de grommunio y Zammad. Descubre qué datos de buzón puede conservar cada método, cómo realizar pruebas piloto y verificar los resultados, y cuándo es apropiado utilizar IMAP o una importación personalizada.

Cómo migrar de forma segura una carpeta de datos de Nextcloud a un disco duro externo.

Cómo migrar de forma segura una carpeta de datos de Nextcloud a un disco duro externo.

Traslada un directorio de datos de Nextcloud a un disco duro externo sin romper las referencias de archivos. Utiliza copias de seguridad, un montaje persistente, rsync, permisos y enlaces simbólicos de forma segura.

Solucione el problema de Nextcloud Cron Jobs que no se ejecuta automáticamente con systemd.

Solucione el problema de Nextcloud Cron Jobs que no se ejecuta automáticamente con systemd.

Solucione los problemas con los temporizadores cron de systemd de Nextcloud en Ubuntu comprobando el usuario del servicio, las rutas de PHP y Nextcloud, la activación del temporizador y el historial de ejecución de trabajos.

Cómo configurar la integración de Etherpad en BigBlueButton

Cómo configurar la integración de Etherpad en BigBlueButton

Habilite las notas compartidas de Etherpad en BigBlueButton 4.0 beta.4 o versiones anteriores. Instale paquetes opcionales, elija una configuración predeterminada para la reunión o global y solucione problemas de proxy.

Solucionar el límite de subida de archivos de Nextcloud de 2 GB: Cómo permitir la subida de archivos grandes

Solucionar el límite de subida de archivos de Nextcloud de 2 GB: Cómo permitir la subida de archivos grandes

Soluciona el límite de subida de 2 GB en Nextcloud revisando PHP, Nginx o Apache, los proxies inversos, los tiempos de espera y el almacenamiento. Prueba el cambio de forma segura con un archivo que supere el límite anterior.

Cómo configurar SSL/HTTPS para ownCloud Server con Let's Encrypt

Cómo configurar SSL/HTTPS para ownCloud Server con Let's Encrypt

Configura Let's Encrypt HTTPS para ownCloud Server en Apache. Verifica el DNS y los puertos, emite un certificado con Certbot, habilita las redirecciones y prueba la renovación.

Solucionar el error "Error en la comprobación de integridad" de ownCloud tras una actualización de versión.

Solucionar el error "Error en la comprobación de integridad" de ownCloud tras una actualización de versión.

Diagnostica las advertencias de integridad de ownCloud después de una actualización y elige una solución segura para archivos principales que no coinciden, archivos faltantes, archivos adicionales o errores de firma de la aplicación.