Запуск скрипта по SSH работает. Но через xinetd или после смены пользователя это не сработает
Я работаю на сервере 7Days to Die. Обычно я подключаюсь через ssh с пользователем "linux" и запускаю команду:
/home/linux/start
Это работает, сервер работает.
Но когда я переключаю пользователя на root (su root) и запускаю:
sudo -u linux /home/linux/start
или же
sudo -u linux -i bash -c '/home/linux/start'
сервер выключается через 5 минут, и я получаю это в лог-файле:
Failed to create secure directory (/run/user/0/pulse): Permission denied
Failed to create secure directory (/run/user/0/pulse): Permission denied
Failed to create secure directory (/run/user/0/pulse): Permission denied
и после некоторых строк я также получаю:
2015-06-23T12:12:15 17,008 INF Disconnect
2015-06-23T12:12:15 17,008 INF NET: Stopping server protocols
Platform assembly: /home/linux/7daysded/7DaysToDie_Data/Managed/Mono.Security.dll (this message is harmless)
2015-06-23T12:12:15 17,054 INF NET: Untiy NW server stopped
2015-06-23T12:12:15 17,055 INF [Steamworks.NET] NET: Server stopped
2015-06-23T12:12:15 17,055 INF [NET] ServerShutdown
То же самое касается xinetd. Когда сервер xinetd пытается запустить скрипт, он тоже падает.
Я предполагаю, что когда я запускаю его через sudo или xinetd, идентификатор пользователя по-прежнему равен 0 (root) вместо 1000 (linux). Как я могу решить проблему?
Startscript:
#!/bin/bash
if pgrep "7DaysToDie." > /dev/null
then
exit
else
cd /home/linux
screen -A -m -d -S 7DaysServer /home/linux/7daysded/startserver.sh -configfile=serverconfig.xml
screen -ls
fi
Некоторая информация о моей системе:
Debian Version 8.1
Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24)
Спасибо и С уважением,
Патрик
ОБНОВИТЬ:
я пытался запустить как root:
ssh -t linux@localhost -p 1111 "/home/linux/restart"
Я надеялся, что это будет то же самое, что сделать это по ssh с помощью putty. Но это все еще не работает.
1 ответ
Кажется, что ваш сервер требует pulseaudio (для вывода звука? что это за сервер?)
теперь, когда вы входите в систему как root, root запускает службу pulseaudio, которая создает несколько файлов, принадлежащих root (например, /run/user/0/pulse
) и которые не могут быть прочитаны другими пользователями (это намеренно: вы не хотите, чтобы все, кто может войти в систему, могли подслушивать человека, который сидит за клавиатурой, не так ли?)
Чтобы предотвратить эту проблему, у вас есть несколько вариантов (лучший сначала; худший последний):
вообще не входите в систему как root. (автоматически) войдите как пользователь linux и запустите сервер.
отключить поддержку звука для сервера (действительно ли нужно воспроизводить звуки или записывать с микрофона?)
остановите принадлежащий root Pulsedio перед запуском вашего запуска; либо вручную запустите пользовательский pulseaudio (или надейтесь, что ваш сервер автоматически создаст его)
настройте свою звуковую систему, чтобы позволить нескольким пользователям подключаться к одному сеансу
просто предоставьте разрешения на чтение / запись проблемных файлов. что-то вроде (как root):
chown -R linux /run/user/0/pulse
до линии судо