Sobre la base de las respuestas:
- Writing to stdin of background process
- Accessing bash command line args [email protected] vs $*
- Why my named pipe input command line just hangs when it is called?
- Can I redirect output to a log file and background a process at the same time?
Escribí dos scripts de shell para comunicarme con mi servidor de juegos.
Este primer script se ejecuta cuando se inicia la computadora. Lo hace iniciar el servidor y configurarlo para leer/recibir mis órdenes mientras se ejecuta en segundo plano:
start_czero_server.sh
#!/bin/sh
# Go to the game server application folder where the game application `hlds_run` is
cd /home/user/Half-Life
# Set up a pipe named `/tmp/srv-input`
rm /tmp/srv-input
mkfifo /tmp/srv-input
# To avoid your server to receive a EOF. At least one process must have
# the fifo opened in writing so your server does not receive a EOF.
cat > /tmp/srv-input &
# The PID of this command is saved in the /tmp/srv-input-cat-pid file
# for latter kill.
#
# To send a EOF to your server, you need to kill the `cat > /tmp/srv-input` process
# which PID has been saved in the `/tmp/srv-input-cat-pid file`.
echo $! > /tmp/srv-input-cat-pid
# Start the server reading from the pipe named `/tmp/srv-input`
# And also output all its console to the file `/home/user/Half-Life/my_logs.txt`
#
# Replace the `./hlds_run -console -game czero +port 27015` by your application command
./hlds_run -console -game czero +port 27015 > my_logs.txt 2>&1 < /tmp/srv-input &
# Successful execution
exit 0
Esta segunda secuencia de comandos que sólo un envoltorio que me permitirá fácilmente para enviar comandos al servidor my:
enviar.sh
half_life_folder="/home/jack/Steam/steamapps/common/Half-Life"
half_life_pid_tail_file_name=my_logs_tail_pid.txt
half_life_pid_tail="$(cat $half_life_folder/$half_life_pid_tail_file_name)"
if ps -p $half_life_pid_tail > /dev/null
then
echo "$half_life_pid_tail is running"
else
echo "Starting the tailing..."
tail -2f $half_life_folder/my_logs.txt &
echo $! > $half_life_folder/$half_life_pid_tail_file_name
fi
echo "[email protected]" > /tmp/srv-input
sleep 1
exit 0
Ahora cada vez que desee enviar un comando al servidor acabo de hacer en el terminal:
./send.sh mp_timelimit 30
Esta escritura me permite mantener tizón del proceso es posible que la terminal actual, ya cada vez que envío un comando, comprueba si hay un proceso de cola ejecutándose en segundo plano. Si no, solo comienza una y cada vez que el proceso envía salidas, puedo verlo en el terminal que usé para enviar el comando, al igual que para las aplicaciones que ejecuta al agregar el operador &
.
Siempre puede mantener abierto otro terminal abierto solo para escuchar la consola de mi servidor servidor. Para hacerlo sólo tiene que utilizar el comando tail
con la bandera -f
seguir mi servidor de salida de la consola:
./tail -f /home/user/Half-Life/my_logs.txt
El artículo es grande, pero un ¿cómo podría enviar el "algo yetanotherthing somethingelse" al proceso? Por ejemplo, tengo un servidor en ejecución que acepta "algo" y hace algo con él. ¿Cómo podría hacer esto? –