0

我接近放弃屏幕并寻找替代品。我的服务器上运行着两台 Minecraft 服务器。DireWolf20 和 EpicCraft。有时我需要重新启动服务器,每次我需要通过 SSH 手动登录并启动屏幕 2 次时,导航到包含服务器启动文件的文件夹,启动并分离会话。我试图制作一个自动化该过程的脚本,给我留下两个命名的会话,我可以稍后重新连接并管理需要。

但我没有成功地使该脚本工作。有时我会得到两个命名的屏幕窗口,其中发生了注意,有时什么也没有发生。

我非常沮丧,不知道我做错了什么。

我的服务器以 ServerStart.sh 文件开头,其中包含:

java -Xms1024m -Xmx2048m -jar FTBServer-1.6.4-965.jar nogui
pause

那是Direwolf20服务器,其他服务器相同。我已经尝试了 100 种不同的方法来使脚本正常工作,也就是说,当我读到使用 ./ 命令启动它时制作一个可以工作的脚本是一回事,但是当它进入我需要添加的 rc.local 文件时: su - [username] -c
ServerStart 不需要 ROOT!
事实上,我不希望它以 root 权限运行。

4

1 回答 1

1

假设您的脚本与启动服务器的命令位于/usr/local/sbin/startup并且您想命名我将使用的屏幕启动服务器:

/usr/bin/screen -dmS startup-server /usr/local/sbin/startup

/etc/rc.local中的这个将以 root 身份启动您的服务器!

[root@vm1]$ screen --help
    ...
    -d (-r)       Detach the elsewhere running screen (and reattach here)
    -m            ignore $STY variable, do create a new screen session.
    -S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
    ...

示例(包括启动脚本 - 而不是屏幕 - 作为不同的用户:

# file: /etc/rc.local
/usr/bin/screen -dmS startup-server1 /usr/local/sbin/startup
/usr/bin/screen -dmS startup-server2 sudo -u git -H /usr/local/sbin/startup
/usr/bin/screen -dmS startup-server3 sudo -u postfix -H /usr/local/sbin/startup

重启...

[root@vm1]$ screen -ls 
There are screens on:
    3292.startup-server3    (07/24/14 01:25:01) (Detached)
    3290.startup-server2    (07/24/14 01:25:01) (Detached)
    3287.startup-server1    (07/24/14 01:25:01) (Detached)
3 Sockets in /var/run/screen/S-root.

您可以附加一个屏幕,例如

[root@vm1]$ screen -r startup-server1

为了完整起见,我的演示脚本是这样做的:

[root@vm1]$ cat /usr/local/sbin/startup
#!/bin/bash

while [ 1 = 1 ]; do
  sleep 5
  echo "five seconds later..."
done

编辑:

也许我没有得到正确的问题。

如果您的脚本不起作用,请记住:

  1. 该脚本必须是可执行的:chmod +x [path to script]
  2. 在命令行中找出 java 二进制文件的位置以及which java并更改您的脚本(如果哪个 java返回,例如/usr/bin/java):

    /usr/bin/java -Xms1024m -Xmx2048m -jar FTBServer-1.6.4-965.jar nogui

于 2014-07-23T23:38:16.593 回答