freenx и невидимые сессии (отрезано от "Курощения")
Модераторы: dimbor, Модераторы разделов
- 
				SirYorik
- Сообщения: 41
freenx и невидимые сессии
давно тут не был. почитал с интересом. но. поскольку у нас исключительно десктоп-режим... то битва вокруг рутлесс прошла мимо... зато интересно что делать с невидимыми сессиями (как-то определять наличие такой сессии и прибивать автоматом, или еще что). то есть это те, что не фигурируют в nxserver --list. но фигурируют в списке процессов (top|htop). с такой сессией юзер не может запустить 1С в живой сессии (тоесть когда их две, невидимая и нормальная). 1с при старте ругается на "окна", точно ругань не вспомню, и падает. лечится это киллом всех процессов данного юзера. после чего он заходит снова и продолжает работать.
			
			
									
						
										
			
			- 
				dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: freenx и невидимые сессии
Устранение незаказанного объекта есть удар по репутации уважающего себя киллера. В файлике /var/lib/nxserver/db/running/sessionId{~<ssid>} живет запущенная сессия, как ее понимает nxserver --list и т.д. В файликах $USERHOME/.nx/C-<servername>-<ndisp>~<ssid>/pids/* живут pid-ы. этой сессии. В выводе команды ps -fu vasja живут еще пиды. Приводить периодически эти списки в соответствие с помощью kill - труда больше чем на несколько часов не составит. Тем более, что живой код можно подсмотреть в скриптах nxserver и nxnode. Идею - дарю

- 
				SirYorik
- Сообщения: 41
Re: freenx и невидимые сессии
> В файлике /var/lib/nxserver/db/running/sessionId{~<ssid>} живет запущенная сессия, как ее понимает nxserver --list
именно, но если nxserver --list не показывает сессию, значит файлика в ../running/.. нет.
значит он наверняка перехал в ../failed/.. (а это nxserver --history)
а процессы висят...
> ps -fu vasja
оноже
pgrep -U vasja
pgrep -l -U vasja
pkill -U vasja (главное лекарство)
> Тем более, что живой код можно подсмотреть в скриптах nxserver и nxnode
смотрел уже.
некисло там накодено.
(надо посмотреть по какому критерию оно переносит сессию из статуса running\suspended в failed...)
есть подозрение что косяк возникает при многодневном висении сесси, когда юзер банально закрыл терминальное окно вместе с открытой 1с.
поэтому в крон вставлена массовая чистка терминалсервера, от всех временных ресурсов (а их у меня гдето 5-6) начиная с nxserver --cleanup
			
			
									
						
										
			
			именно, но если nxserver --list не показывает сессию, значит файлика в ../running/.. нет.
значит он наверняка перехал в ../failed/.. (а это nxserver --history)
а процессы висят...
> ps -fu vasja
оноже
pgrep -U vasja
pgrep -l -U vasja
pkill -U vasja (главное лекарство)
> Тем более, что живой код можно подсмотреть в скриптах nxserver и nxnode
смотрел уже.
некисло там накодено.
(надо посмотреть по какому критерию оно переносит сессию из статуса running\suspended в failed...)
есть подозрение что косяк возникает при многодневном висении сесси, когда юзер банально закрыл терминальное окно вместе с открытой 1с.
поэтому в крон вставлена массовая чистка терминалсервера, от всех временных ресурсов (а их у меня гдето 5-6) начиная с nxserver --cleanup
- 
				bsavelev
- Сообщения: 231
- ОС: Debian
Re: freenx и невидимые сессии
еще можно использовать nxsadmin
			
			
									
						
										
			
			- 
				SirYorik
- Сообщения: 41
Re: freenx и невидимые сессии
o. точно.  
 
осталось выяснить видит ли он невидимое.
и будет ли вообще невидимое появляться теперь.
			
			
									
						
										
			
			 
 осталось выяснить видит ли он невидимое.
и будет ли вообще невидимое появляться теперь.
- 
				dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: freenx и невидимые сессии
SirYorik писал(а): ↑08.10.2008 12:52> В файлике /var/lib/nxserver/db/running/sessionId{~<ssid>} живет запущенная сессия, как ее понимает nxserver --list
именно, но если nxserver --list не показывает сессию, значит файлика в ../running/.. нет.
значит он наверняка перехал в ../failed/.. (а это nxserver --history)
а процессы висят...
Да не..., все проще:
1) Лезем в db/running, набираем список гарантировано рабочих сессий.
2) Из $USERHOME/.nx/C-<servername>-<ndisp>~<ssid*>/pids/* по полученному списку сессий нагребаем список неприкасаемых pid-ов.
3) Грохаем все у пользователя, кроме входящего в этот список и ssh*.