我有一个 Java 应用程序(Minecraft 服务器),您可以使用以下命令启动它。
java -Xmx4G -Xms4G -jar spigot.jar
我有 8 个 Minecraft 服务器在专用服务器上运行,所以我使用 tmux。
我有一个名为“servers”的 tmux 会话,在该 tmux 会话中我有 8 个窗口。 每个窗口都运行一个 Minecraft 服务器。
当服务器重新启动时,它们将启动一个名为 start.sh 的脚本
所以我的问题是:如何使服务器在与之前相同的会话中启动?
是不是类似
#!/bin/bash
tmux a -t servers #something java -jar -Xmx4G -Xms4G Spigot.jar
这是一个简单的脚本,用于在具有不同窗口的 tmux 会话中启动多个服务器。
#!/bin/bash
SESSION='minecraft_servers'
tmux -2 new-session -d -s $SESSION
# Setup a window for server 1
tmux rename-window 'server1'
tmux send-keys "cd /server1_dir; java -jar -Xmx4G -Xms4G Spigot.jar" C-m
# Setup a window for server 2
tmux new-window -t $SESSION:1 -n 'server2'
tmux send-keys "cd /server2_dir; java -jar -Xmx4G -Xms4G Spigot.jar" C-m
# Setup a window for server 3
tmux new-window -t $SESSION:2 -n 'server3'
tmux send-keys "cd /server3_dir; java -jar -Xmx4G -Xms4G Spigot.jar" C-m
...(start more servers here the same as the two above)
# Set default window to first window
tmux select-window -t $SESSION:0
此脚本运行后,您只需使用 tmux Attach 命令像平常一样打开会话。
尝试使用以下脚本:
sleep 1
tmux send-keys -t servers:0.0 "java -jar -Xmx4G -Xms4G Spigot.jar" C-m
send-keys
命令将按键发送到现有窗格。
-t
选项以 <session>:<window>.<pane>
格式指定目标窗格
在此选项后写下您的命令。使用引号:也必须发送空格。在命令后添加
C-m
键。这意味着 Ctrl+m。与输入“Enter”相同
此脚本将您的命令发送到您的窗格。该窗格必须存在,并且它必须是可以运行您的命令的终端。所以你应该先准备好你的窗格。
如果调用 spigot 服务器的
/restart
命令,则服务器停止并在停止结束时执行您的脚本。所以我们需要添加 sleep
命令来在服务器停止后等待。否则,您的命令将在服务器控制台(而不是终端)中执行。