es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP – Cronjob fallando al ejecutarse en Ubuntu 18.04

Tengo un archivo PHP que quiero ejecutar como una tarea cron.

En el servidor, el archivo se encuentra en la ubicación /var/www/html/directory/file.php y no tiene errores, ya que se puede ejecutar en el navegador yendo a www.exampledomain.com/directory/file.php.

En el archivo /etc/crontab tengo la siguiente línea:

* * * * * root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2>&1

En mi servidor, al escribir sudo service cron status veo lo siguiente:

● cron.service - Daemon regular de procesamiento de programas en segundo plano
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-07-29 10:23:11 UTC; 4 meses 23 días ago
     Docs: man:cron(8)
 Main PID: 769 (cron)
    Tasks: 1 (limit: 1140)
   CGroup: /system.slice/cron.service
           └─769 /usr/sbin/cron -f

Dec 21 17:46:01 ip-172-31-34-251 CRON[20648]: (ubuntu) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null
Dec 21 17:46:01 ip-172-31-34-251 CRON[20649]: (root) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2
Dec 21 17:46:01 ip-172-31-34-251 CRON[20647]: pam_unix(cron:session): sesión cerrada para el usuario ubuntu
Dec 21 17:46:01 ip-172-31-34-251 CRON[20646]: pam_unix(cron:session): sesión cerrada para el usuario root
Dec 21 17:47:01 ip-172-31-34-251 CRON[20661]: pam_unix(cron:session): sesión abierta por el usuario ubuntu (uid=0)
Dec 21 17:47:01 ip-172-31-34-251 CRON[20660]: pam_unix(cron:session): sesión abierta por el usuario root (uid=0)
Dec 21 17:47:01 ip-172-31-34-251 CRON[20662]: (ubuntu) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null
Dec 21 17:47:01 ip-172-31-34-251 CRON[20663]: (root) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2
Dec 21 17:47:01 ip-172-31-34-251 CRON[20661]: pam_unix(cron:session): sesión cerrada para el usuario ubuntu
Dec 21 17:47:01 ip-172-31-34-251 CRON[20660]: pam_unix(cron:session): sesión cerrada para el usuario root

Se supone que la tarea cron debería actualizar otro archivo, pero eso no está sucediendo. ¿Qué está saliendo mal o qué puedo hacer para solucionar este problema? Anteriormente, solía usar cron como un servicio en un dominio alojado, pero recién he comenzado a usar Ubuntu, por lo que no estoy seguro de los comandos de Linux.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El trabajo de cron parece estar funcionando correctamente y no se informan errores en el registro. Sin embargo, si el archivo que se supone que debe actualizar el trabajo de cron no se actualiza, puede haber un problema con los permisos de archivo o la ruta del archivo.

    Primero, asegúrese de que la ruta del archivo en el script de PHP sea correcta y que los permisos del archivo permitan que el script de PHP escriba en el archivo. Puede verificar los permisos del archivo ejecutando el siguiente comando en la terminal:

    ls -l /ruta/al/archivo

    Si los permisos del archivo son incorrectos, puede cambiarlos utilizando el comando chmod. Por ejemplo, para otorgar permiso de escritura al propietario del archivo, puede ejecutar:

    chmod u+w /ruta/al/archivo

    Si la ruta del archivo y los permisos son correctos, puede intentar agregar alguna salida de depuración al script de PHP para ver si se está ejecutando correctamente por el trabajo de cron. Puede agregar algo como lo siguiente en la parte superior del script:

    error_log('Trabajo de cron ejecutándose en '.date('Y-m-d H:i:s')."\n", 3, '/ruta/al/archivo/de/depuración.log');

    Esto registrará un mensaje en un archivo en /ruta/al/archivo/de/depuración.log cada vez que se ejecute el trabajo de cron. Verifique este archivo para ver si el trabajo de cron se está ejecutando correctamente y si se están registrando errores.

    Si aún tiene problemas, es posible que desee verificar los registros del sistema en busca de errores relacionados con el script de PHP o el trabajo de cron. Los registros del sistema se encuentran en /var/log/syslog y puede verlos utilizando el comando tail, de la siguiente manera:

    tail -f /var/log/syslog

    Esto mostrará las últimas líneas del registro y se actualizará a medida que se agreguen nuevas líneas. Esté atento a cualquier error relacionado con el trabajo de cron o el script de PHP.

    Si ninguna de estas soluciones funciona, es posible que desee intentar ejecutar el script de PHP manualmente desde la línea de comandos para ver si hay algún problema al ejecutarlo en ese contexto. Para hacer esto, simplemente ejecute el siguiente comando en la terminal:

    cd /var/www/html/directorio && php archivo.php

    Esto cambiará al directorio donde se encuentra el script de PHP y lo ejecutará utilizando el intérprete de PHP. Verifique la salida en busca de errores o problemas que puedan estar causando que el script no actualice el archivo.

Comments are closed.