使用golang 还有必要使用 nginx 么

Python022

使用golang 还有必要使用 nginx 么,第1张

简单学习了golang/go语言的基础语法,做个定时切割nginx日志的小脚本练习下,感觉挺好使的~

脚本代码如下,install后将脚本加入到crontab定时运行,当然golang也可以自己定时执行,这里加入到crontab运行,是因为golang进程有可能会被kill掉....

package main

import (

"fmt"

"os"

"path/filepath"

"syscall"

"time"

"strings"

"os/exec"

"io/ioutil"

)

func main(){

//日志目录

srcDirPath := "/usr/local/nginx/logs"

//存放切割日志目录

targetDirPath := "/usr/local/nginx/logs/history"

//ngixn进程ID文件

nginxPidPath := "/usr/local/nginx/logs/nginx.pid"

//检查存放切割日志目录是否存在,如果不存在则创建

finfo, errFile := os.Stat(targetDirPath)

if errFile !=nil {

errFile := os.MkdirAll(targetDirPath, 0777)

if errFile != nil {

fmt.Println("创建日志目录失败:"+errFile.Error())

return

}

} else if !finfo.IsDir() {

fmt.Println(targetDirPath+"已经存在且不是一个目录")

return

}

//获取当前日期,作为此次切割日志根目录

t := time.Now()

nowDateTime := t.Format("2006-01-02")

logPath := targetDirPath+"/"+nowDateTime

os.MkdirAll(logPath, 0777)

//获取nginx的进程ID

pfile,err := os.Open(nginxPidPath)

defer pfile.Close()

if err != nil {

fmt.Println("not found nginx pid file")

return

}

pidData,_ := ioutil.ReadAll(pfile)

pid := string(pidData)

pid = strings.Replace(pid,"\n","",-1)

//遍历日志目录

filepath.Walk(srcDirPath,func(path string, info os.FileInfo, err error) error {

if info.IsDir() {

return nil

} else {

//获取切割日志路径

targetfilePath := strings.Replace(path,srcDirPath,logPath,1)

if strings.Index(targetfilePath,"nginx.pid") != -1 {

return nil

}

//移动文件

syscall.Rename(path,targetfilePath)

//创建原文件,这里不需要了,因为重启nginx后会自动生成滴

// nFile,errCreate := os.Create(path)

// if errCreate != nil {

// fmt.Println("create file faild:"+errCreate.Error())

// }

// defer nFile.Close()

}

return nil

})

//平滑重启nginx

cmd := exec.Command("kill","-USR1",pid)

_, errCmd := cmd.Output()

if errCmd != nil {

fmt.Println("重启nginx失败:"+errCmd.Error())

return

}

fmt.Println("success")

运维工程师必须掌握的基础技能有:基础命令、基础服务、自动化技能、安全。

1、基础命令

这个基础就包括:用户管理命令,文件管理命令,权限管理命令,软件包管理命令,vim命令,网络管理命令等。这些命令好学,因为每个命令都有相应的help帮助文档,而且很多网站都集成了命令帮助,把这些站点进行收藏,时不时的查下就记住了。

2、基础服务:

企业常用的基础服务就包括DHCP,NTP,DNS,Nginx,Apache,Mysql,Redis,Vsftpd,Nfs。基础服务的掌握,相比命令稍微的难一点,但是同样有很多技巧。比如可以去各大视频站获取优质的免费视频学习。

3、自动化技能:

这个自动化就包括脚本自动化,需要熟悉掌握shell脚本或者Python脚本;包括监控自动化,不能靠传统的点击页面,查看进程来判断服务是否在线,需要熟悉掌握zabbix,Prometheus等主流监控软件;还包括工具自动化,需要掌握向ansible,puppet,Jenkins等自动化软件,实现服务的批量部署与业务的自动化。

4、安全:

作为运维工程师,首先就要时刻保障公司业务系统,服务器安全稳定运行。所以安全至关重要,主流的iptables,firewalld防火墙技术要熟练掌握,有必要的话常见的挖矿病毒,ddos等攻击有段也要有所了解。

运维工程师(Operations),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率、优化资源利用率提高整体的ROI。

运维工程师面对的最大挑战是大规模集群的管理问题,如何管理好几十万台服务器上的服务,同时保障服务的高可用性,是运维工程师面临的最大挑战。