根据答案:
我写了两个shell脚本来与我的游戏服务器通信。我第一次这样做了。因为它们它们不再起作用了。每次执行./send.sh commands
命令行都会挂起,直到我点击Ctrl+C
。
当我直接echo commamd > /tmp/srv-input
启动服务器并将其配置为在后台运行时读取/接收命令:
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
pkill -f hlds
# Set up a pipe named `/tmp/srv-input`
rm /tmp/srv-input
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
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`
cat /tmp/srv-input | ./hlds_run -console -game czero +port 27015 > my_logs.txt 2>&1 &
# Successful execution
exit 0
这第二个脚本只是一个包装器,可以让我轻松地将命令发送到我的服务器:
send.sh
#!/bin/sh
echo "$@" > /tmp/srv-input
# Successful execution
exit 0
现在每次我想向我的服务器发送命令时,我只是在终端上执行:
./send.sh mp_timelimit 30
我总是打开另一个打开的终端只是为了收听我的服务器服务器控制台。要做到这一点,只需使用带有tail
标志的-f
命令来跟踪我的服务器控制台输出:
./tail -f /home/user/Half-Life/my_logs.txt
答案 0 :(得分:2)
最好直接从管道中读取hlds_run
,而不是让cat
将其输入。
尝试
./hlds_run … > my_logs.txt 2>&1 < /tmp/srv-input &
而不是
cat /tmp/srv-input | ./hlds_run …