Создайте сеанс Screen с помощью скрипта bash, используя contab

8

Я хочу, чтобы файл .jar запускался каждый раз при загрузке сервера (мы используем VPS), поэтому я отредактировал crontab, используя, crontab -eа затем добавляя @reboot bash /home/bash/startserver.sh. Но я даже не дошел до того, что сценарий работает вообще.

Вот мой сценарий:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

Причина, по которой мне нужно использовать, screenзаключается в том, что когда я запускаю bukkit.jar, он переходит в консоль, где я могу вводить больше команд для этой программы (я уверен, что вы все знакомы с Minecraft и его серверами на этом сайте, хотя Хаха), но мне нужно иметь возможность выполнять другие команды как root и для других программ во время работы, и даже закрывать сеанс PuTTY.

Единственная проблема заключается в том, что при запуске этого сценария он создает сеанс экрана, но его идентификатор отсутствует в списке screen -ls, так как идентификатор пуст. Скорее я должен пойти, чтобы /run/screen/S-rootнайти идентификатор и затем использовать типовое screen -X -S $name quitна нем.

Может быть, это даже невозможно, или, может быть, на самом деле есть более простой способ сделать это (я бы хотел проще), но я не могу понять, почему это не работает. И если это возможно, возможно ли присоединиться к сеансу screen -S bukkitпри запуске сценария bash? (Думаю, несколько вопросов, но большое спасибо за вашу помощь! (Скобки))

Джейкоб Ларсон
источник

Ответы:

15

Запустите экран в отдельном режиме и заставьте его выполнить команду внутри него:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Возможно, вы захотите создать специальный скрипт bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

Таким образом, если сценарий становится более сложным, вам не нужно писать длинную строку screen, и поэтому screenкоманда может остаться прежней, просто:

screen -d -m -S bukkit path/to/bukkit.sh
Янош
источник
1
Я попытался сделать оба варианта: один с одним более длинным файлом, а затем другой с двумя отдельными файлами, но теперь сеанс экрана вообще не создается. Я пытался запускать команды прямо из командной строки, но это тоже не сработало ..: /
Джейкоб Ларсон
Вы получаете сообщение об ошибке или что-то? Сначала запустите bukkit.shскрипт, работающий в командной строке. Далее проверьте, что screen -S bukkit path/to/bukkit.shработает. Далее проверьте, что screen -d -m -S bukkit path/to/bukkit.shработает. Наконец, настройте cron. Сначала попробуйте самую простую вещь, и делайте маленькие шаги, чтобы понять, какой шаг нарушается. Скажите мне это, и сообщение об ошибке вы получите, если вам нужна помощь.
Janos
1

Вы должны update-rc.dследующим образом включить службу при загрузке:

# update-rc.d cron defaults
Maythux
источник
@JacobLarson Не за что .. Лучше пометить ответ и ответ, если это поможет вам
Maythux