我遇到过这样的问题:用户使用客户帐户登录服务器,以该用户身份打开屏幕会话,然后从不关闭它。通常这不会是一个大问题,但我们遇到了一个问题:如果客户从服务器迁移(这会删除他们的用户帐户),而其用户名下有一个活动的屏幕会话,则该屏幕会话处于空闲状态。虽然这是仍然没什么大问题,但这个群殴还有另一个步骤。
如果先前驻留在服务器上的客户端被迁移,并且旧屏幕会话仍处于活动状态后退服务器屏幕拒绝启动,因为/var/run/screen/S-username
仍然存在并由旧 UID并且 [拥有全新 UID 的用户] 无权触碰其命名目录下的任何文件。
我试过了:
- 只需终止屏幕进程,但这并不能清理
/var/run/screen/S-username
。 - 找到一些
screen
参数组合,让我可以正常终止这些会话,但是屏幕不想让我触碰当前用户会话以外的任何东西,即使我以 root 身份登录。 sudo -u '#uid' screen -r
但是如果您指定不存在的 UID,sudo 将不允许您执行任何操作。
当用户不再存在时,如何让屏幕正确关闭并清理其所有文件?
答案1
如果您不介意杀死它们,而只是想找到一种方法来处理位于 /var/run/screen 中的无人拥有的套接字,我只需使用带有 -nouser 标志的 find 设置一个 cron 作业来清理旧文件:
# 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
#
答案2
是否screen -wipe
符合您的要求?它对于删除无效的屏幕进程非常有效。
# screen --help |grep wipe
-wipe Do nothing, just clean up SockDir.