Tengo varios trabajadores PHP y necesito establecer un retraso entre el inicio de cada uno de ellos. ¿Cómo manejarlo?
Iniciar 1 proceso / Esperar 20 segundos / Iniciar 2do proceso / Esperar 20 segundos... Mantenga vivos 50 procesos al mismo tiempo.
[program:get_comments]
directory=/var/www/
command=/usr/bin/php post_request.php
user=root
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
numprocs=50
stdout_logfile=/var/www/worker.log
stderr_logfile=/var/www/worker.error
Respuesta1
Tuve un problema similar en el que, al iniciar 64 procesos python rq-worker usando supervisorctl, se generaba una alerta de CPU y RAM en cada reinicio. Lo que hice fue lo siguiente:
command=/bin/bash -c "sleep %(process_num)02d && virtualenv/bin/python3 manage.py rqworker --name %(program_name)s_my-rq-worker_%(process_num)02d default low"
Básicamente, antes de ejecutar el comando de Python, duermo durante N segundos, donde N es el número de proceso, lo que básicamente significa que mi supervisor iniciará un proceso rq-worker cada segundo.
En su caso, lo siguiente debería funcionar:
command=/bin/bash -c "sleep $((%(process_num)01d + 20)) && /usr/bin/php post_request.php"
Tenga en cuenta que el primer proceso también comenzará después de 20 segundos.