Я столкнулся с проблемой, когда у меня есть пользователи, которые входят на серверы под учетными записями клиентов, открывают сеанс экрана от имени этого пользователя, а затем никогда не закрывают его. Обычно это не вызывает особого беспокойства, однако мы сталкиваемся с проблемой, когда, если клиент мигрирует с сервера [который удаляет его учетную запись] с активным сеансом экрана под его именем пользователя, этот сеанс экрана простаивает. Хотя это по-прежнему не большая проблема, есть еще один шаг в этом кластере.
Если клиент, который ранее находился на сервере, на котором все еще активен старый сеанс экрана, переносится назад к экрану сервера отказывается запускаться, потому что /var/run/screen/S-username
все еще существует и принадлежит старый UID, и пользователю [с новым UID] не разрешается прикасаться ни к одному из этих файлов в их указанном каталоге.
Я пробовал:
/var/run/screen/S-username
.screen
аргументы, которые позволят мне изящно завершить эти сеансы, но screen не позволяет мне касаться чего-либо, кроме сеансов текущего пользователя, даже если я вошел в систему как root.sudo -u '#uid' screen -r
но sudo не позволит вам ничего делать, если вы укажете несуществующий UID.Как я могу правильно выключить экран и очистить все его файлы, когда пользователь больше не существует?
Если у вас все в порядке с их уничтожением и вы действительно просто хотите как-то справиться с незавершенными сокетами, находящимися в / var / run / screen, я бы просто настроил задание cron, используя find с флагом -nouser, чтобы очистить старые файлы:
# touch owned notowned && chown 12345:54321 notowned
# ls -l
total 0
-rw-r--r-- 1 12345 54321 0 Sep 27 21:59 notowned
-rw-r--r-- 1 root root 0 Sep 27 21:59 owned
# find . -nouser
./notowned
#
Делает screen -wipe
делай то, что ищешь? Он хорошо работает для удаления неработающих экранных процессов.
# screen --help |grep wipe
-wipe Do nothing, just clean up SockDir.