Si la página de administración de ownCloud indica que las tareas en segundo plano no se están ejecutando, la limpieza en cola y otras tareas programadas podrían retrasarse hasta que alguien visite el sitio. En un servidor Linux administrado por systemd, configure el modo de tareas en segundo plano de ownCloud para Cron y use un temporizador para ejecutarlo occ system:croncomo la cuenta del servidor web. La documentación actual de ownCloud Server recomienda usar el cron del sistema para las tareas en segundo plano habituales y menciona específicamente los temporizadores de systemd como otra forma de programar comandos.
Esta guía es para ownCloud Server Classic instalado directamente en un host Linux. No se aplica a ownCloud Infinite Scale, que tiene una arquitectura diferente, ni a la imagen oficial de Docker de ownCloud, que ya ejecuta cron internamente. Para Docker, siga la configuración documentada de la imagen en lugar de crear un segundo temporizador en el host. Consulte la documentación actual de las tareas en segundo plano de ownCloud Server .
Verifique el comando antes de cambiar el horario.
Un servicio systemd define el comando a ejecutar; un temporizador inicia ese servicio periódicamente. Primero, confirme la ruta de instalación de ownCloud y la cuenta del servidor HTTP. Los ejemplos a continuación usan /var/www/owncloudy www-data, comunes en Debian y Ubuntu. Otras distribuciones de Linux pueden usar wwwrun, apache, u otra cuenta.
Ejecuta el comando ownCloud manualmente con esa cuenta para distinguir entre un comando defectuoso y una programación defectuosa:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
Modifique el ejecutable y la ruta de PHP para occque coincidan con su servidor. ownCloud recomienda usar system:cronpara trabajos en segundo plano; las guías antiguas que programan cron.phppueden hacer referencia a comportamientos heredados. Un comando actual puede finalizar sin imprimir un mensaje de éxito, así que verifique su estado de salida echo $?inmediatamente después: 0significa que el comando finalizó correctamente. Si devuelve un error, corrija primero la ruta, la instalación de PHP CLI, los permisos, la conectividad de la base de datos o el error de ownCloud. El temporizador ejecutará repetidamente el mismo comando fallido si omite esta verificación.
Configura ownCloud en modo Cron.
En la configuración de administrador de ownCloud, abra la sección de trabajos en segundo plano o Cron y seleccione Cron . También puede configurar el programador desde el directorio de instalación con:
cd /var/www/owncloud
sudo -E -u www-data php occ background:cron
Esto activa el modo Cron; el comando programado permanece sin cambios occ system:cron. El manual de ownCloud indica que este comando equivale a seleccionar Cron en la página de administración. Cron es preferible para un servidor que debe procesar tareas de forma fiable, ya que AJAX depende de las visitas a la página y puede dejar tareas pendientes durante los periodos de baja actividad. Para una instancia personal pequeña, AJAX puede ser más sencillo, pero es menos predecible.
Cree el servicio systemd y el temporizador.
Crea /etc/systemd/system/owncloudcron.servicecon tu cuenta HTTP real y la ruta de ownCloud:
[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=oneshotIndica a systemd que el comando se ejecuta correctamente y luego finaliza. Proporcionar la ruta completa de PHP evita depender de los recursos limitados PATHdisponibles para los servicios del sistema. El directorio de trabajo ayuda a ownCloud a resolver rutas relativas. Mantenga la cuenta de servicio alineada con el propietario de los archivos y el acceso a los datos de ownCloud. No ejecute la tarea como root.
A continuación, crea /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
El manual de ownCloud recomienda una cadencia de 15 minutos para su ejemplo estándar de cron y reconoce los temporizadores de systemd como una alternativa. Este temporizador se inicia cinco minutos después del arranque y luego programa ejecuciones posteriores 15 minutos después de la activación del servicio. Si su carga de trabajo requiere otro intervalo, modifíquelo OnUnitActiveSecdeliberadamente y considere el tiempo que necesita cada ejecución para finalizar. Evite configurar otra entrada de crontab para el mismo comando; los programadores duplicados pueden iniciar ejecuciones redundantes y dificultar la resolución de problemas.
Indícale a systemd que recargue sus definiciones de unidad, luego habilite e inicie el temporizador:
sudo systemctl daemon-reload
sudo systemctl enable --now owncloudcron.timer
daemon-reloadSe requiere después de crear o editar archivos de unidad. Habilitar el temporizador hace que se inicie automáticamente después de futuros arranques; --nowlo inicia en la sesión actual. Habilite la unidad del temporizador, no solo el servicio.
Descubre por qué se omitió o falló una carrera.
Comprueba si el temporizador está activado y cuándo se ejecutará de nuevo:
systemctl is-enabled owncloudcron.timer
systemctl list-timers --all owncloudcron.timer
systemctl status owncloudcron.timer
Un temporizador habilitado debería aparecer en la lista de temporizadores con una próxima activación. Si no aparece, confirme el nombre del archivo de la unidad, reinicie systemd y habilite el temporizador nuevamente. Si el temporizador muestra que se está ejecutando, pero el trabajo de ownCloud sigue retrasado, revise el servicio y sus registros.
systemctl status owncloudcron.service
sudo journalctl -u owncloudcron.service --since today
Busque una ruta incorrecta, un directorio de datos inaccesible, una extensión PHP faltante o un error de base de datos. Pruebe manualmente el comando exacto en el archivo de servicio para www-datareproducir el entorno lo más fielmente posible. Verifique también que haya utilizado el comando ownCloud occ system:cron, en lugar de copiar un ejemplo de Nextcloud que invoque cron.php.
Verifica que ownCloud esté procesando trabajos.
Tras uno o dos intervalos del temporizador, confirme que el servicio se ha completado correctamente y que el temporizador tiene programada una activación posterior. A continuación, compruebe el estado de las tareas en segundo plano en la página de administración de ownCloud. La hora de la última ejecución mostrada debería avanzar y la advertencia de Cron obsoleto debería desaparecer. Si systemd informa de que la operación se ha realizado correctamente, pero la advertencia persiste, revise el registro de la aplicación ownCloud y compruebe si la interfaz web está conectada a la misma instancia y base de datos que utiliza la instalación desde la línea de comandos.
Para los contenedores oficiales de ownCloud, no instale estas unidades de host a menos que haya deshabilitado intencionalmente el planificador interno del contenedor y la documentación actual de ownCloud respalde su configuración. La configuración aquí descrita es una solución a nivel de host para ownCloud clásico en systemd; los nombres de los servicios, las rutas, las versiones de PHP y el comportamiento del contenedor dependen de la implementación.