Centos Tmux - Bash 脚本

问题描述 投票:0回答:2

我有一个 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

java bash centos sh tmux
2个回答
0
投票

这是一个简单的脚本,用于在具有不同窗口的 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 命令像平常一样打开会话。


0
投票

尝试使用以下脚本:

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
 命令来在服务器停止后等待。否则,您的命令将在服务器控制台(而不是终端)中执行。

© www.soinside.com 2019 - 2024. All rights reserved.