Экран не начинается с 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'