最近一直负责管理服务器的vnc,但今天新建22号端口vnc时,却反复出现a vnc server is already running as :22,问题最终解决,但过程非常曲折,记录下解决思路并汇总目前已知所有的排除问题的方法:
1、问题分析
当通过systemctl status查询时,出现该错误,意味着端口已经被占用,需要检查
2、检查端口
如果使用vncserver -list命令,会发现只显示当前用户的vncserver的端口号,对排除毫无帮助
可以使用ss -tulpn| grep vnc 命令,抓取所有vnc端口
如果是僵尸vnc线程占用端口,在这一步已经可以排除,但很可惜,我未能找到5922端口
3、检查缓存
尝试删除/tmp/.X相关缓存,但我仔细阅读了相关博客,发现一般采用该方法的是在vnc报错信息中出现:
Warning: localhost.localdomain:1 is taken because of /tmp/.X1-lock Remove this file if there is no X server localhost.localdomain:1 A VNC server is already running as :1
vnc已经引导用户删除缓存和日志锁,即运行rm /tmp/.X[端口号]-lock 和 rm /tmp/.X11-unix/X[端口号]
但我只报错A VNC server is already running as :22。
此外删除缓存的后果未知,不能影响其他用户,所以该方案放弃。
4、进一步查阅资料
Xvnc4解决端口占用: “A vnc server is already runing as :x“_xvnc释放端口_步子大了吧的博客-CSDN博客
在阅读该文章恍然大悟,其实6000端口也被vnc一并占用了,如果上述尝试无果,就应该检查6000相关端口是否被vnc或者其他应用占用。
可以使用netstat -tunpl 查看,也可以使用ss -tanlp |grep 6022来检查,发现6022被其他应用占用,问题解决
问题最终解决,特此记录,希望可以帮助大家
PS:记得之前通过kill 和 kill -9 VNC报错的线程有时候也能解决问题