Я использую несколько серверов Team Fortress 2 и хочу написать небольшой скрипт управления.
По сути, серверы TF2 представляют собой процесс fg, который предоставляет консоль сервера, поэтому я могу запустить сервер, ввести статус и получить от него ответ:
***@purple:~/tf2$ ./start_server_testing
Auto detecting CPU
Using AMD Optimised binary.
Server will auto-restart if there is a crash.
Console initialized.
[bla bla bla]
Connection to Steam servers successful.
VAC secure mode is activated.
status
hostname: Team Fortress
version : 1.0.6.1/15 3883 secure
udp/ip : ***.***.133.31:27600
map : ctf_2fort at: 0 x, 0 y, 0 z
players : 0 (2 max)
# userid name uniqueid connected ping loss state adr
Отлично, теперь я хочу создать скрипт, который отправляет команду sm_reloadadmins на все мои серверы. Лучший способ, который я нашел для этого, - использовать именованный канал fifo. Теперь я хочу, чтобы этот канал был доступен только для чтения и не блокировал серверный процесс, чтобы я мог писать в канал, и сервер выполнял его, но все же я хочу писать через консоль на одном сервере, поэтому, если я переключусь обратно на процесс fg сервера, и я набираю статус, я хочу, чтобы ответ был напечатан.
Я пробовал это (при условии, что serverfifo - это mkfifo serverfifo):
./start_server_testing < serverfifo
Не работает, сервер не запустится, пока что-то не будет записано в канал.
./start_server_testing <> serverfifo
На самом деле это работает довольно хорошо, я вижу консольный вывод сервера и могу писать в fifo, и сервер выполняет команды, но я больше не могу писать через консоль на сервер. Кроме того, если я пишу «выход» в канал (который должен завершить сервер) и запускаю его на экране, экранное окно по какой-то причине уничтожается (wtf почему?).
Мне нужно только, чтобы сервер читал fifo без блокировки, И весь мой ввод с клавиатуры на самом сервере должен быть отправлен на сервер, И весь вывод сервера должен быть записан на консоль.
Возможно ли это? Если да, то как?