Це гарна ідея покласти "screen -r" у мій .bashrc?


17

Я хотів би використовувати екран, щоб підтримувати ssh сесії в живих на моєму сервері. Було б добре, якби я міг автоматично відновити будь-який запущений сеанс для свого користувача під час входу. Простий спосіб зробити це - додавання "screen -r" до мого .bashrc, і це, здається, працює добре. Мені просто цікаво, чи це щось порушить за умов, яких я ще не перевіряв. Хтось із досвідом тут, хто може мені сказати, чи це я повинен робити?

Відповіді:


20

Вам потрібно screen -R -dавтоматично приєднатись до існуючого сеансу, якщо такий існує, і створити сеанс інакше.

Переконайтеся, що ви робите це лише на інтерактивних оболонках . Bash-джерела ~/.bashrcнавіть для неінтерактивних оболонок, коли його батьківський процес rshd або sshd (про це йдеться в документації, але це легко пропустити). Ви можете сказати, що оболонка є інтерактивною, оскільки $-містить i.

case $- in
  *i*) screen -Rd;;
esac

Це не дозволить вам запускати різні сеанси екрана в різних терміналах.

Вам потрібно буде відірватися від екрана, а потім вийти з батьківської оболонки, щоб вийти. Це можна вирішити, використовуючи exec screenзамість screen.

Якщо ви запустите оболонку, відмінну від оболонки для входу, вас перейдуть на екран, а це не те, чого ви хотіли б більшість часу. Я хоч би обмежувався цим, коли ви працюєте безпосередньо в інтерактивному сеансі ssh, у своєму творі щось подібне ~/.bash_profile:

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

Будьте обережні, коли ви робите складні речі зі своєю, .bashrcоскільки помилка, яка викликає вихід оболонки, ускладнить вхід.


Я рекомендую не змінювати файли ініціалізації оболонок на сервері, а замість цього явно запускати екран із клієнта, як у

ssh -t host.example.com screen -R -d

(Ви, мабуть, створите псевдонім оболонки або ярлик середовища для робочого столу на клієнті.) Таким чином, ви можете легко вибрати не запускати екран, вказати альтернативну назву сеансу тощо.


Ідеально. Повинен бути на сторінці довідника.
marcusw

Хіба не краще для ssh запускати screen -D -Rчи навіть screen -D -RR?
niutech

2

Ваші сценарії запуску X-сервера часто запускають нову оболонку, наприклад, якщо ви входите в систему за допомогою gdm за допомогою "Сеансу, визначеного користувачем".

Я думаю, що все, що не виходить, може спричинити зависання вашого запуску X. Це включало б screen -r.


Сценарії запуску сервера X не запускаються .bashrc. Але є й інші обставини, коли це буде проблемою, наприклад, під час бігу ssh host.example.com somecommand(дивно, тоді баш працює .bashrc).
Жиль

Саме в деяких дистрибутивах вибираєте "Сеанс, визначений користувачем". У Ubuntu він джерело .profile явно, інші викликають .xsession всередині оболонки для входу, що зазвичай означатиме .bash_profile, а більшість користувачів надсилає .bashrc всередині свого .bash_profile.
Мікель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.