Actualmente estoy desarrollando una aplicación de alojamiento de servidor (principalmente para mí o con fines de aprendizaje) y todo funciona muy bien y todo eso, no sé cuántos de ustedes están familiarizados con Counter-Strike en general, pero inicio mi servidor y todo. está bien, pero me separo de él (todo esto está escrito en Node.js), por lo que no puedo usarlo screen
ni nada, pero básicamente, si quisiera cambiar el nivel en el servidor, podría escribir changelevel de_dust2
o algo así si iniciara el servidor manualmente, pero como estoy desconectado no tengo forma de darle ningún comando a este proceso.
He leído sobre FIFO y el uso de sockets Unix, pero todo lo que parece hacer es hacerme eco, no estoy seguro de no entender los FIFO, pero pensé que podría
mkfifo /tmp/server
eco "./startserver" > /tmp/server &
y luego si quisiera
echo "changelevel de_dust2" > /tmp/server
Lo siento si no lo tengo claro, básicamente tengo un proceso demonio al que quiero enviar comandos.
Respuesta1
Debe asegurarse de que su proceso "daemon" lea desde la tubería.
mkfifo /tmp/server
./startserver < /tmp/server &
sleep 10000 > /tmp/server &
Más adelante, todo lo que escriba /tmp/server/
aparecerá en startserver
la entrada estándar de, por ejemplo:
echo "changelevel de_dust2" > /tmp/server
Nota: el sleep
comando es necesario para mantener la tubería abierta, porque cada echo
comando intentará cerrarla cuando finalice, posiblemente terminando startserver
.
Respuesta2
Se me ocurren tres formas. Mientras el proceso del demonio utilice stdin/out, no debería ser un problema comunicarse con él.
Si utiliza
screen
,tmux
o una solución similar, no es necesario que desconecte el servidor. Puede mantenerlo "conectado" de forma segura a la consola y desconectar la pantalla.puede usarlo
/proc/N/fd/{0,1}
para comunicarse siempre que tenga los derechos adecuados, donde N es el PID del demonio, fd0 suele ser la entrada estándar y fd1 es la salida estándar del proceso N.Su enfoque con una canalización con nombre (FIFO) es correcto en esencia, pero lo está haciendo sólo a medias. Lo que hizo fue cambiar la salida estándar del proceso a la tubería, lo que significa que todo lo que el demonio imprime en la salida estándar se escribe en la tubería desde donde puede extraerlo mediante, digamos, cat. La tubería es semidúplex, lo que significa que solo puede conectar una entrada con una salida. Lo que necesitas son dos tubos, uno para entrada y otro para salida. Luego, todo lo que envíe al demonio a través de una tubería llegará allí mientras la respuesta pasa por la otra tubería a otro programa que leerá la tubería.
Supongamos que hay dos tuberías pin
y pout
. Tu corres:
demonio < pin > puchero
Entonces debes ejecutar algo como
puchero de gato y gato > pin
para poder comunicarnos. Este es un mal ejemplo, puede tener condiciones de carrera ya que es asincrónico pero espero que entiendas la idea.