Sail как и любое многоконтейнерное docker приложение, должен быть максимально изолированной средой выполнения, настроенной под работу из коробки, без любых дополнительных зависимостей извне(либо с их минимумом). Таково моё мнение. Поэтому:
1). Выносим конфиги для кастомизации
sail artisan config:publish
2). Настройка Supervisor
открываем docker/8.4/supervisord.conf и добавляем:
[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
[program:laravel-schedule]
command=/bin/bash -c "while [ true ]; do (php /var/www/html/artisan schedule:run); sleep 60; done"
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/schedule.log
user=sail
тут всё ясно, добавили 2 новые директивы отвечающие за запуск очередей и cron
3). Заново собираем sail контейнер
sail down --rmi all -v
sail up -d
именно так, а не —force-recreate
P.S. Мудреная штука Supervisor, и безусловно полезная. Но вне sail и laravel для реализации cron задач вполне можно обходиться стандартным cron сервисом притянув его даже в «голый» php контейнер, в котором выпилен systemd. Правда для этого нужно немножко «поизвращаться» в Dockerfile, предварительно настроить sudo для пользователя(в этом конечно концепция безопасности нарушается), и перед php-fpm запустить сервис «вручную». Зато можно смапить затем файлик из /etc/cron.d/ и задавать там в привычном синтаксисе всё что угодно.
P.P.S: Лучше юзать свою логику на bash для cli php без всяких супернадстроек, и стандартные php-fpm & nginx для бек-фронта — много подводных камней пролетит мимо.