Как стать автором
Поиск
Написать публикацию
Обновить
0
0

Пользователь

Отправить сообщение

Разумнее было бы сделать белый список ресурсов куда можно стучаться из CI. Тот же npm к примеру.

Следует избегать расширения прототипа. Глобальный объект тоже вариант плохой (ну может быть только в целях дебага). При Вашем подходе лучше уж бросить объект через provide/inject

entrypoint_scheduler.sh
#!/usr/bin/env bash

trap "echo 'Shutting down'; kill \$!; exit" SIGINT SIGTERM

SCHEDULE_COMMAND="${@:-echo 'scheduler ticked'}";
FIRST_START_DELAY="${FIRST_START_DELAY:-2}";
SCHEDULE_PERIOD="${SCHEDULE_PERIOD:-60}";

STDOUT="${STDOUT:-/proc/1/fd/1}";
STDERR="${STDERR:-/proc/1/fd/2}";

echo "[ Info ] Command to execute: \"$SCHEDULE_COMMAND\". Delay between executions: $SCHEDULE_PERIOD";
echo '[ Info ] Press [CTRL+C] to stop';

sleep "$FIRST_START_DELAY";

while :; do
  # Stop freeze on large delay
  for (( i=1; i<=$SCHEDULE_PERIOD; i+=1)); do
    sleep 1;
  done;

  # Execute command
  ${SCHEDULE_COMMAND} > ${STDOUT} 2> ${STDERR};
done;

docker-compose.yml
&scheduler-service scheduler:
  <<: *app-service-template
  entrypoint: /scripts/entrypoint_scheduler.sh
  command: /path/to/app/artisan schedule:run
  hostname: *scheduler-service
  ports: []

Использования Supervisor да и в целом других дополнительных процессов внутри основного приложения это не "docker-way". К примеру для обработки очередей я бы предложил такую схему в Вашем случае:


  1. Создать дополнительный entrypoint entrypoint-queue.sh


    #!/usr/bin/env bash
    
    trap "echo 'Shutting down'; kill \$!; exit" SIGINT SIGTERM
    
    echo "Start the queue..."
    php /var/www/project/artisan queue:work 

  2. В docker-compose.yml создать сервис обработки очередей на основе главного сервиса:


    # main application example
    &app-service app: &app-service-template
     image: some-image
     hostname: *app-service
     volumes:
       - ..:..
     restart: always
    
    # queue service
    &queue-service queue:
     <<: *app-service-template
     entrypoint: /scripts/entrypoint_queue.sh
     hostname: *queue-service
     restart: always
     ports: []


Готово. Супервайзер не нужен.
Похожим способом решается задача планирования (аля cron)

А зачем Вам нужен Supervisor в докер контейнере?

Конечно. Применить антипаттерн Event Bus.
та пара опций всегда используется вместе и позволяет передать данные от компонента родителя во всю иерархию его потомков. Эти опции прежде всего используют для написания плагинов, официальная документация не рекомендует использовать их в приложениях.

Участники core-team сами говорят, что это утверждение спорное. Потому скорее всего формулировку «не рекомендуется использовать в приложениях» уберут к релизу 3 версии.
По-моему этот: drops[dot]by
Или можно так:
docker run -d --name syncthing -v /var/syncthing:/var/syncthing -p 8384:8384 -p 22000:22000 --restart=always

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Web Developer
Senior