Golang检测Linux服务器端口占用
- 代码实现
func CheckPort(port int) error {
checkStatement := fmt.Sprintf(`netstat -anp | grep -q %d ; echo $?`, port)
output, err := exec.Command("sh", "-c", checkStatement).CombinedOutput()
if err != nil {
return err
}
// log.Println(output, string(output)) ==> [48 10] 0 或 [49 10] 1
result, err := strconv.Atoi(strings.TrimSuffix(string(output), "\n"))
if err != nil {
return err
}
if result == 0 {
return fmt.Errorf("端口%d已被占用", port)
}
return nil
}
- **纠错思路**
- 第8行原代码为:
result, err := strconv.Atoi(string(output)),
报错为:strconv.Atoi: parsing "0\n": invalid syntax - 经排查,
CombinedOutput()函数的执行结果0\n(1\n)包含换行符\n,
利用strings.TrimSuffix()函数删除换行符\n
- 延伸知识
strings.TrimSuffix()和strings.TrimRight()的区别
func main() {
str1 := "abcdabceeebdc"
str2 := "abcd"
str3 := "abced"
str4 := "ebdc"
// `TrimRight(s, cutset string) string`指从`s`右端开始,删除所有`cutset`中出现的字符
// 若从右到左的过程中遇到其他字符,则停止删除。
fmt.Println(strings.TrimRight(str1, str2))
fmt.Println("空行:", strings.TrimRight(str1, str3))
// `TrimSuffix(s, suffix string)`删除后缀`suffix` ,若不匹配,返回s
fmt.Println(strings.TrimSuffix(str1, str4))
fmt.Println(strings.TrimSuffix(str1, str2))
}
// 输出结果:
// abcdabceee
// 空行:
// abcdabcee
// abcdabceeebdc
2019-09-24改
func CheckPort(port int) error {
checkStatement := fmt.Sprintf("netstat -anp | grep -q %d ", port)
output, err := exec.Command("sh", "-c", checkStatement).CombinedOutput()
if err != nil {
return nil // err != nil 说明端口没被占用
}
if len(output) > 0 {
return fmt.Errorf("端口%d已被占用", port)
}
return nil
}
注:以上方法的缺陷是目标操作系统上有可能没有netstat命令
2019-09-29改
func CheckPort(port string) error {
var err error
tcpAddress, err := net.ResolveTCPAddr("tcp4", ":" + port)
if err != nil {
return err
}
for i := 0; i < 3; i++ {
listener, err := net.ListenTCP("tcp", tcpAddress)
if err != nil {
time.Sleep(time.Duration(100) * time.Millisecond)
if i == 3 {
return err
}
continue
} else {
listener.Close()
break
}
}
return nil
}
Golang检测Linux服务器端口占用的更多相关文章
- 检测Linux服务器端口是否开通
现如今云服务器已经是大势所趋,国内比较著名的云服务器厂商有阿里.腾讯,国外有aws,尽管有的公司目前为止还是使用的物理机,但是无论你是使用的云服务器还是物理机,在运行服务时都必不可少的需要监听到指定的 ...
- linux(8)Linux 查看端口占用情况
前言 平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种 Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. 1. lsof -i:端口号 用 ...
- 【转】Linux 查看端口占用情况
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. lsof lsof(list open files)是一个列出当前系统打开文件的工具. lsof 查看端口占用语法格式: l ...
- Linux查看端口占用进程
Linux查看端口占用进程 netstat -anlp|grep 8081 tcp /java 此处3195为进程ID
- 转 linux 服务器内存占用统计
linux 服务器内存占用统计 原文: https://www.cnblogs.com/eaglediao/p/6641811.html 当前内存占用率的计算,是根据top命令显示的Mem.used ...
- windows和Linux查看端口占用进程并关闭
Windows: 以端口8080为例: 1.查找对应的端口占用的进程:netstat -aon|findstr "8080" ,找到占用8080端口对应的程序的PID号: ...
- 26. linux查看端口占用情况
linux系统下,查看端口占用情况的命令:lsof -i[root@www ~]# lsof -i
- 查看Linux下端口占用情况的命令
在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...
- linux服务器内存占用太高-释放内存
修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档): Writing to this will cause the ke ...
随机推荐
- C++运算符重载学习总结
在C ++中,我们可以使运算符适用于用户定义的类. 这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载. 例如,我们可以在像String这样的类中重载运算符'+',这样我们就可 ...
- springboot 启动停止脚本
https://www.cnblogs.com/lovychen/p/6211209.html 参考 centos 转码解决方案: yum install dos2unix dos2unix ** ...
- MYSQL性能测试工具SYSBENCH
[root@localhost ~]$ wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0. ...
- fastadmin CMS等系列插件安装不成功的问题
由于fastadmin开发者 没有做到权限优化问题,导致用户在linux服务器上lnmp环境下安装的fastadmin后台安装插件一直产生权限不足,安装不成功的问题, 再次给大家一个具体解决办法 对 ...
- zabbix3.4配置第三方邮件报警
废话不多说,直接进入主题. 1.安装mailx [root@localhost ~]#yum install malix -y #yum安装malix [ ...
- The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero
题目链接:https://nanti.jisuanke.com/t/41349 题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较. 灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点 ...
- Wpf DataGrid动态添加列,行数据(一)
由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...
- 第12节-BLE协议HCI层的数据格式
学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...
- USB设备驱动程序1
目的:USB鼠标用作按键,左键相当于字母L,右键相当于字母S,中键相当于Enter.如何来实现?用到输入子系统:1)分配input_dev2)设置3)注册4)硬件相关操作对于USB鼠标来说,硬件操作应 ...
- java String、String.concat和StringBuilder性能对比
看到网上有人已经做过对比,并且贴出了代码,然后我运行了之后发现跟我分析的结论差距很大.发现他的代码有个问题,UUID.randomUUID() 首次调用耗时会很高,这个耗时被计算给了String,这对 ...