使用带有多个启动sh文件的屏幕的rc.local在启动时自动启动脚本

时间:2014-07-23 21:54:09

标签: java linux gnu-screen rc

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

BUT 我没有成功地使该脚本工作。有时我得到两个命名的屏幕窗口,注意到了,有时根本没有任何事情发生。

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

我的服务器以包含以下内容的ServerStart.sh文件开头:

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

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

1 个答案:

答案 0 :(得分:1)

假设您的脚本带有启动服务器的命令位于 / usr / local / sbin / startup ,并且您想要将屏幕命名为 startup-server 我会使用方法:

/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 [脚本路径]
  2. 在命令行中使用哪个java 找出java二进制文件的位置并更改脚本(如果哪个java 返回,例如 / usr / bin中/ JAVA ):

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