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.

La base de datos SQLite no se actualizará al ejecutar el script PHP desde cron.

No puedo actualizar una base de datos SQLite cuando ejecuto el script PHP desde mi crontab. Cuando simplemente abro example.com/app.php en mi navegador, funciona bien. Lo mismo ocurre cuando ejecuto:

php -q /opt/bitnami/apache2/htdocs/app.php

Pero mi crontab:

*/5 * * * * php -q /opt/bitnami/apache2/htdocs/app.php >> /opt/bitnami/apache2/htdocs/log/monitor.log 2>&1

No actualiza la base de datos SQLite. También he implementado un registro de archivos (al final del archivo) y se escribe en cada ejecución. Entonces el crontab se ejecuta y parece estar funcionando. El registro de cron está vacío. He verificado que SQLite esté habilitado con:

php -a if(class_exists('SQLite3')) echo 'ok';

El directorio y el archivo de base de datos en sí mismo son rwxrwxrwx. ¿Alguna idea? ¿Por qué funciona al ejecutar el script directamente desde CLI pero no desde el crontab? La única diferencia debería ser el usuario, pero los permisos están establecidos en 777. Entonces no puedo ver dónde está el problema. El servidor es AWS Lightsail con PHP 7.3.

===

EDITAR: El crontab es del usuario bitnami.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con las rutas de archivo y los permisos de usuario cuando se ejecuta el script desde el crontab. Cuando ejecuta el script desde la línea de comando o el navegador, es probable que lo haga como su cuenta de usuario regular o como el usuario del servidor web, que tiene los permisos necesarios para acceder al archivo SQLite DB.

    Sin embargo, cuando ejecuta el script desde el crontab, se está ejecutando como un usuario diferente, probablemente el usuario que ejecuta el demonio cron (en este caso, el usuario “bitnami”). Este usuario puede no tener los permisos necesarios para acceder al archivo DB u otros archivos relacionados.

    Para solucionar esto, puede intentar dos cosas:

    1. Especifique las rutas de archivo completas en su script PHP, incluida la ruta al archivo SQLite DB. Esto asegurará que el script pueda encontrar el archivo independientemente del usuario que lo esté ejecutando. Por ejemplo:

    `
    $dbfile = '/opt/bitnami/apache2/htdocs/db.sqlite';
    `

    1. Cambie el propietario y / o los permisos del archivo DB y los directorios relacionados para permitir que el usuario “bitnami” los acceda. Puede hacer esto usando los comandos “chown” y “chmod”. Por ejemplo:

    `
    sudo chown bitnami:bitnami /opt/bitnami/apache2/htdocs/db.sqlite
    sudo chmod 664 /opt/bitnami/apache2/htdocs/db.sqlite
    `

    (Tenga en cuenta que es posible que deba ajustar las rutas y los permisos según sea necesario para su configuración específica).

    Al hacer una o ambas cosas, debería poder ejecutar su script PHP desde el crontab y actualizar el archivo SQLite DB como se esperaba.

Comments are closed.