如何使用Laravel Sail配置Supervisor和调度?

mrzz3bfm  于 2023-05-01  发布在  其他
关注(0)|答案(5)|浏览(185)

我用的是拉拉威尔帆。我想使用supervisor和cronjob。但我不明白我怎么能用帆来配置这些东西。
我找不到任何关于如何做到这一点的例子。

djmepvbi

djmepvbi1#

由于sail使用Ubuntu容器,因此您可以按照以下说明操作:https://serverspace.io/support/help/automate-tasks-with-cron-ubuntu-20-04/
通常,它们存储在/var/spool/cron/crontabs中,因此您可能需要创建一个卷来保存它们(否则它们将在下次重新启动容器时被删除)。
您可以使用docker-compose exec laravel.test bashI believe连接到容器。
已安装Supervisord

cunj1qz1

cunj1qz12#

我用另一种方式解决了我的问题。我把这个密码加给赛勒的上司了。conf文件。

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

也许这不是最好的解决方案,但它的工作。

wvt8vs2t

wvt8vs2t3#

Laravel Sail是作为一个开发环境而设计的,因此我相信Laravel有目的地省略了自动运行cron作业和队列工人,而支持开发人员使用适当的artisan命令来控制运行它们。
要在Sail中使用Laravel Scheduler,您可以简单地运行:

sail artisan schedule:work

此命令将在前台运行,并每分钟调用调度程序,直到您终止该命令。
类似地,如果你想在Sail中运行Queue worker,你可以运行以下命令:

sail artisan queue:work

在本地运行这些命令可以让开发人员完全控制,而不是让任务和队列在容器内自动运行。

我强烈建议您坚持手动运行这些命令,这样您的应用程序就不会意外地发出一百万封电子邮件,而这些电子邮件被放置在队列中,或者运行其他非预期的作业或任务!

如果你不同意这个建议,你确实想让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自动运行队列。

mrwjdhj3

mrwjdhj34#

您可以按照以下步骤操作:
1.检查你的docker-compose。yml文件找到laravel.test -〉build -〉context来确保sail包。实验:./vendor/laravel/sail/runtimes/8.2
1.在app目录旁边创建一个目录,并将sail运行时文件复制到其中。Exp:sail .
1.编辑受监督者。conf文件中创建的目录sail,并添加这些行:

[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid

[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[include]
files = /var/www/html/supervisor/*.conf

您可以创建supervisor目录并将您的Supervisor配置文件放入其中。
你应该运行./vendor/bin/sail down./vendor/bin/sail build来重建你的配置,然后你可以运行./vendor/bin/sail up -d来启动容器。

gcxthw6b

gcxthw6b5#

要为Laravel队列设置Supervisor,这是我在Laravel Sail的Docker容器中尝试的。
要进入容器,请执行以下操作:

docker-compose exec laravel.test bash

在容器内运行:

apt update
apt install nano
cd /etc/supervisor/conf.d
touch laravel-worker.conf
nano laravel-worker.conf

粘贴:

[supervisord]
nodaemon=false
user=root
logfile=/var/log/supervisor/laravel-worker.log
pidfile=/var/run/laravel-worker.pid

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=sail
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
stopwaitsecs=3600
startsecs=0

[supervisorctl]

使用Nano保存:

ctrl + o
ctrl + x

要运行队列工作进程,请执行以下操作:

supervisord -c /etc/supervisor/conf.d/laravel-worker.conf

要在应用程序代码更改时重新启动队列工作进程,请执行以下操作:

service supervisor restart

记住,队列工作进程是长期存在的进程,并将引导的应用程序状态存储在内存中。因此,它们在启动后不会注意到代码库中的更改。因此,在部署过程中,请确保重新启动队列工作进程。此外,请记住,应用程序创建或修改的任何静态状态都不会在作业之间自动重置。队列- Laravel -运行队列工作器

  • 注意:如果Docker容器重新启动,您需要再次手动运行supervisord命令。*

通过深入研究Laravel Sail,看起来你不应该改变/etc/supervisor/conf.d/supervisord.conf,因为它与Docker紧密相连。例如,如果超级进程被终止,则容器停止i。e. Web服务器停止,您已注销。这使得更改队列工作者配置更加困难,因为它需要重新启动进程。
参见sail/runtimes/8.0/start-container
最后的想法:总的来说,如果我不得不重新开始,知道我现在知道的,我可能已经在主机系统的Docker容器之外配置了Supervisor(和cron)。它不那么复杂,可能不太容易打破在未来的情况下,帆更新。

相关问题