process_name=%(program_name)s
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan horizon
user=sail
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/html/horizon.log
stopwaitsecs=3600
[program:cron-job]
process_name=%(program_name)s
command=crond -f
user=root ; crond should be started as root at all times
autostart=true
autorestart=true
numprocs=1
redirect_stderr=false
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
5条答案
按热度按时间djmepvbi1#
由于sail使用Ubuntu容器,因此您可以按照以下说明操作:https://serverspace.io/support/help/automate-tasks-with-cron-ubuntu-20-04/
通常,它们存储在
/var/spool/cron/crontabs
中,因此您可能需要创建一个卷来保存它们(否则它们将在下次重新启动容器时被删除)。您可以使用
docker-compose exec laravel.test bash
I believe连接到容器。已安装Supervisord
cunj1qz12#
我用另一种方式解决了我的问题。我把这个密码加给赛勒的上司了。conf文件。
也许这不是最好的解决方案,但它的工作。
wvt8vs2t3#
Laravel Sail是作为一个开发环境而设计的,因此我相信Laravel有目的地省略了自动运行cron作业和队列工人,而支持开发人员使用适当的artisan命令来控制运行它们。
要在Sail中使用Laravel Scheduler,您可以简单地运行:
此命令将在前台运行,并每分钟调用调度程序,直到您终止该命令。
类似地,如果你想在Sail中运行Queue worker,你可以运行以下命令:
在本地运行这些命令可以让开发人员完全控制,而不是让任务和队列在容器内自动运行。
我强烈建议您坚持手动运行这些命令,这样您的应用程序就不会意外地发出一百万封电子邮件,而这些电子邮件被放置在队列中,或者运行其他非预期的作业或任务!
如果你不同意这个建议,你确实想让Laravel调度程序在Sail docker容器中自动运行,那么步骤应该是这样的:
1.使用
sail artisan sail:publish
发布Sail docker资产1.编辑Dockerfile以添加cron包e。例如
RUN apt-get install -y cron
1.编辑Dockerfile以在
/etc/cron.d/laravel
中创建适当的cron作业1.编辑Dockerfile以启动cron服务e.g.
RUN /usr/sbin/service cron start
1.使用
sail build --no-cache
重建Sail Docker容器类似地,在发布了Sail资产之后,您还可以编辑提供的
supervisord.conf
,以使用supervisord自动运行队列。mrwjdhj34#
您可以按照以下步骤操作:
1.检查你的docker-compose。yml文件找到laravel.test -〉build -〉context来确保sail包。实验:
./vendor/laravel/sail/runtimes/8.2
1.在
app
目录旁边创建一个目录,并将sail运行时文件复制到其中。Exp:sail
.1.编辑受监督者。conf文件中创建的目录
sail
,并添加这些行:您可以创建
supervisor
目录并将您的Supervisor配置文件放入其中。你应该运行
./vendor/bin/sail down
和./vendor/bin/sail build
来重建你的配置,然后你可以运行./vendor/bin/sail up -d
来启动容器。gcxthw6b5#
要为Laravel队列设置Supervisor,这是我在Laravel Sail的Docker容器中尝试的。
要进入容器,请执行以下操作:
在容器内运行:
粘贴:
使用Nano保存:
要运行队列工作进程,请执行以下操作:
要在应用程序代码更改时重新启动队列工作进程,请执行以下操作:
记住,队列工作进程是长期存在的进程,并将引导的应用程序状态存储在内存中。因此,它们在启动后不会注意到代码库中的更改。因此,在部署过程中,请确保重新启动队列工作进程。此外,请记住,应用程序创建或修改的任何静态状态都不会在作业之间自动重置。队列- Laravel -运行队列工作器
通过深入研究Laravel Sail,看起来你不应该改变
/etc/supervisor/conf.d/supervisord.conf
,因为它与Docker紧密相连。例如,如果超级进程被终止,则容器停止i。e. Web服务器停止,您已注销。这使得更改队列工作者配置更加困难,因为它需要重新启动进程。参见sail/runtimes/8.0/start-container。
最后的想法:总的来说,如果我不得不重新开始,知道我现在知道的,我可能已经在主机系统的Docker容器之外配置了Supervisor(和cron)。它不那么复杂,可能不太容易打破在未来的情况下,帆更新。