Экран не начинается с rc.local

У меня проблема, когда я не могу запустить сеанс экрана при загрузке с помощью файла rc.local. Конкретный экран, который я запускаю, предназначен для сервера spigot minecraft.

Это мой файл rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/pi/Documents/bootlog.sh
/home/spigot1_12/startspigot.sh
exit 0

Это скрипт startpigot.sh (с помощью chmod u+x):

#!/bin/bash

cd /home/spigot1_12

boot=$(date)

echo "Starting spigot server in screen \"minecraft\" @  $boot " >> /home/pi/Documents/minecraftlog


screen -S minecraft java -Xms512M -Xmx1008M -jar /home/spigot1_12/spigot-1.12.jar nogui

Файл minecraftlog обновляется при каждой загрузке, поэтому скрипт запускается.

Когда я запускаю команду "sudo sh startpigot.sh", все работает отлично. Экран запускается, и файл minecraftlog обновляется. Я могу снова найти экран с помощью "sudo screen -ls"

При загрузке, однако, и "sudo screen -ls", и "screen -ls" не возвращают сокетов.

Что может быть причиной этого? Единственными двумя пользователями являются "пи" и root.

Заранее спасибо!

1 ответ

Решение

Рабочий экран в отдельном режиме (когда у вас нет активного терминала, как в rc.local или crontab):

screen -dm -S <session name> <command>

-d -m Стартовый экран в "отдельном" режиме

-S При создании нового сеанса этот параметр можно использовать для указания значимого имени для сеанса.

Запуск сценария на новом отдельном экране от имени текущего пользователя (rc.local = root):

screen -dmS <session name> <command>, пример:

screen -dmS screenName bash /home/user/run.sh


Запуск скрипта из rc.local как user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

Другие вопросы по тегам