Автоматический запуск сценария при загрузке с использованием rc.local с несколькими экранами, который запускает файл sh

Я близок к тому, чтобы отказаться от экрана и искать альтернативы. На моем сервере работают два сервера Minecraft. DireWolf20 и EpicCraft. Иногда мне нужно перезагрузить сервер, и каждый раз, когда мне нужно дважды войти вручную через SSH и запустить экран, перейти к папке с файлом запуска для серверов, запустить и отсоединить сеанс. Я пытался создать сценарий, который бы автоматизировал этот процесс, оставив мне два именованных сеанса, к которым я мог бы подключиться позже и управлять необходимыми.

НО мне НЕ удалось заставить этот сценарий работать. Иногда я получаю два окна с именами на экране, в которых происходит запись, а иногда вообще ничего не происходит.

Я ужасно расстроен и понятия не имею, что делаю неправильно.

Мои серверы начинаются с файла ServerStart.sh, который содержит:

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

Это сервер Direwolf20, где другой сервер такой же. Я перепробовал 100 разных вещей, чтобы заставить скрипт работать, то есть когда я прочитал, что одно дело - создать скрипт, который работает, когда я запускаю его с помощью команды ./, но когда он попадает в файл rc.local, мне нужно добавить : su - [имя пользователя] -c
ServerStart НЕ НУЖЕН ROOT!
На самом деле, я не хочу, чтобы он запускался с привилегиями root.


person Exill    schedule 23.07.2014    source источник


Ответы (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 [путь к скрипту]
  2. узнайте, где находится двоичный файл java, с помощью which java в командной строке и измените свой сценарий (если какая java вернула, например, / usr / bin / java ):

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

person jxp315    schedule 23.07.2014