Я хотел бы использовать screen для поддержания сеансов ssh на моем сервере. Было бы неплохо, если бы я мог автоматически возобновлять любой запущенный сеанс для моего пользователя при входе в систему. Самый простой способ сделать это — добавить "screen -r" в мой .bashrc, и это, кажется, работает нормально. Мне просто интересно, не сломает ли это что-нибудь в условиях, которые я еще не тестировал. Кто-нибудь с опытом здесь может сказать, стоит ли мне это делать?
решение1
Вам необходимо screen -R -d
автоматически подключиться к существующему сеансу, если он существует, и создать сеанс в противном случае.
Убедись, что тыделайте это только в интерактивных оболочках. Bash исходит ~/.bashrc
даже для неинтерактивных оболочек, когда его родительский процесс — rshd или sshd (это упоминается в документации, но это легко пропустить). Вы можете сказать, что оболочка интерактивна, потому что $-
содержит i
.
case $- in
*i*) screen -Rd;;
esac
Это не позволит вам легко запускать разные сеансы экрана на разных терминалах.
Вам нужно будет отсоединиться от экрана, а затем выйти из родительской оболочки, чтобы выйти из системы. Это можно решить, используя exec screen
вместо screen
.
Если вы запустите оболочку, отличную от оболочки входа, вы будете перенаправлены в screen, что не то, что вам нужно в большинстве случаев. Я бы по крайней мере ограничил это тем, когда вы работаете напрямую в интерактивной сессии ssh, с чем-то вроде следующего в вашем ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Будьте осторожны, когда выполняете сложные операции с оболочкой, .bashrc
так как ошибка, приводящая к выходу из нее, может затруднить вход в систему.
Что ярекомендоватьне изменять файлы инициализации оболочки на сервере, а вместо этого запускать screen явно с клиента, как в
ssh -t host.example.com screen -R -d
(Вероятно, вам придется создать псевдоним оболочки или ярлык среды рабочего стола на клиенте.) Таким образом, вы сможете легко отказаться от запуска screen, указать альтернативное имя сеанса и т. д.
решение2
Ваши скрипты запуска X-сервера часто запускают новую оболочку, например, если вы входите в систему с помощью gdm, используя «пользовательский сеанс».
Я думаю, что все, что не завершается, может привести к зависанию запуска X. Это касается и screen -r
.