shell makefile sh background-process

shell - Capturar el PID de un proceso en segundo plano iniciado por un Makefile



background-process (2)

Si Make te da demasiados problemas, siempre puedes hacer que el objetivo inicie un script sh; en esa secuencia de comandos, inicie el proceso, el fondo y luego envíe el pid a un archivo.

Tengo un Makefile que inicia un servidor web de Django. Me gustaría que el servidor se inicie en segundo plano, con el PID guardado en un archivo.

Mi receta es así:

run: venv @"${PYTHON}" "${APP}/manage.py" runserver 80

Intuitivamente, para hacer un seguimiento del proceso y capturar el PID, tendría que hacer algo como esto:

run: venv @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid"

Esto no funciona, sin embargo. El sub-shell que ''make'' usa (/ bin / sh en mi caso) funciona cuando usas:

<command> &

... a fondo un proceso, y funciona cuando se usa:

<command> ; <command>

(o <command> && <command> , etc ...) para encadenar comandos. Sin embargo, cuando intento tomar el primer proceso y encadenar otro, aparece el siguiente error:

/bin/sh: -c: line 0: syntax error near unexpected token `;''

¿Cuál es la mejor manera de procesar un fondo y capturar el PID en un Makefile?

Gracias
- B


Solo deje un símbolo comercial, sin un punto y coma después:

run: venv @"${PYTHON}" "${APP}/manage.py" runserver 80 & echo "$$!" > "${LOGDIR}/django.pid"

Ampersand actúa como separador de comando de la misma manera que un punto y coma:

<command> & <command>