Estoy implementando mi aplicación Laravel en el entorno de ElasticBeanstalk. Estoy tratando de ejecutar un comando en la Tarea de programación en el servidor. Pero no está funcionando. Esto es lo que he hecho.
Programo mi comando en el archivo Kernel.php de la siguiente manera.
$schedule->command('counter:update')->everyMinute()->onOneServer();Estoy usando Redis como mi controlador de caché y está funcionando.
Luego probé dos enfoques diferentes.
Primer enfoque: uso del paquete Laravel AWS Worker , https://packagist.org/packages/dusterio/laravel-aws-worker
Instalé el paquete siguiendo las instrucciones mencionadas en el documento.
Luego incluyo en la lista blanca las rutas de trabajo mencionadas en el documento en el middleware CSRF.
Luego creé un archivo cron.yml dentro de la carpeta raíz del proyecto con el siguiente contenido.
version: 1 cron: - name: "schedule" url: "/worker/schedule" schedule: "* * * * *"Luego implementé mi aplicación. Pero la tarea de programación no funciona. Así que probé el segundo enfoque de la siguiente manera.
Segundo enfoque: uso de Crontab
Creé un archivo .ebextensions/cronjob.config con el siguiente contenido.
files: "/etc/cron.d/schedule_run": mode: "000644" owner: root group: root content: | * * * * * root . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1 commands: remove_old_cron: command: "rm -f /etc/cron.d/*.bak"Luego implementé mi aplicación. El segundo enfoque tampoco funciona. ¿Qué falta en mi configuración y cómo puedo hacer que funcione?
Este es mi otro archivo cronjob.config.
files: "/etc/cron.d/mycron": mode: "000644" owner: root group: root content: | * * * * * root /usr/local/bin/myscript.sh "/usr/local/bin/myscript.sh": mode: "000755" owner: root group: root content: | #!/bin/bash date > /tmp/date * * * * * root . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1 exit 0 commands: remove_old_cron: command: "rm -f /etc/cron.d/mycron.bak"El cron.yml que probó es solo para entornos de trabajo .
/opt/elasticbeanstalk/support/envvars es solo para Amazon Linux 1 . Dado que está utilizando 64bit Amazon Linux 2 v3.0.3 running PHP 7.3 (según recuerdo), el cron generará un error.
Por lo tanto, debe centrarse en el segundo enfoque, que está en línea con el blog de AWS sobre cómo usar cron en AL2:
Por lo tanto, recomendaría ejecutar el trabajo cron a través de un script (por ejemplo, /usr/local/bin/myscript.sh ) como se muestra en el blog.
Contenido modificado para /usr/local/bin/myscript.sh .
Puede probar primero solo con date > /tmp/date solo para verificar si el trabajo cron funciona. Para esto, debe implementar su aplicación y verificar si /tmp/date contiene la hora generada por este script.
"/usr/local/bin/myscript.sh": mode: "000755" owner: root group: root content: | #!/bin/bash date > /tmp/date # the line below is commented out. #/usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1 exit 0 Las variables env se almacenan en /opt/elasticbeanstalk/deployment/env
Por lo tanto, para cargarlos en su script, puede usar lo siguiente:
env $(cat /opt/elasticbeanstalk/deployment/env | xargs) sh -c '/usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1'o en dos lineas
export $(cat /opt/elasticbeanstalk/deployment/env | xargs) /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1