| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package main
- import (
- "fmt"
- "os"
- "path/filepath"
- "sync"
- "gopkg.in/ini.v1"
- "hnyfkj.com.cn/rtu/linux/baseapp"
- "hnyfkj.com.cn/rtu/linux/sshd"
- )
- const MODULE_NAME = sshd.MODULE_NAME
- type MQTTBroker struct {
- Address string `ini:"BrokerAddress"` // 地址端口
- Username string `ini:"Username"` // 用户名称
- Password string `ini:"Password"` // 接入密码
- }
- type Config struct {
- MQTTSrv MQTTBroker `ini:"MQTTSrv"`
- }
- var (
- CfgServers = &Config{}
- Version = "1.0.0.2"
- )
- func loadCfgServers() error {
- cfgFile := filepath.Join(baseapp.CFG_DIR, "sshd_cfg.ini")
- cfgIni, err := ini.Load(cfgFile)
- if err != nil {
- return err
- }
- if cfgIni.HasSection("MQTTSrv") {
- if err := cfgIni.Section("MQTTSrv").MapTo(&CfgServers.MQTTSrv); err != nil {
- return err
- }
- } else {
- return fmt.Errorf("配置文件\"%s\"缺少\"[MQTTSrv]\"节", cfgFile)
- }
- return nil
- }
- func main() {
- baseapp.InitPath()
- if err := EnsureSSHDConfig(); err != nil {
- fmt.Printf("[YFKJ_SSHD] ensure config failed: %v\n", err)
- os.Exit(1)
- }
- cfgFile := filepath.Join(baseapp.CFG_DIR, "sshd_cfg.ini")
- baseapp.InitLogger(cfgFile)
- baseapp.SingleInstanceRun() // 异步非阻塞
- baseapp.Logger.Infof("程序版本: %s 构建时间: %s\n程序开始运行...",
- Version, baseapp.BuildTime)
- if err := loadCfgServers(); err != nil {
- baseapp.Logger.Errorf("[%s] 加载服务器配置项失败: %v!!", MODULE_NAME, err)
- return
- }
- devIMEI := baseapp.GetArgsParamStr("-devIMEI", "")
- success := sshd.ModuleInit(CfgServers.MQTTSrv.Address, CfgServers.MQTTSrv.Username, CfgServers.MQTTSrv.Password, devIMEI)
- if !success {
- return
- }
- <-baseapp.IsExit2()
- sshd.ModuleExit()
- baseapp.Logger.Info("程序退出")
- baseapp.ExitLogger() // 安全的关闭日志模块
- baseapp.SafeExit() // 安全的关闭退出程序
- }
- const defaultSSHDCfg = `[Log]
- ; 日志级别: trace、debug、info、warn、error、fatal、panic
- Level = info
- ; 输出目标: console(控制台)、file(文件)、all(控制台+文件)
- Target = file
- ; 每个日志文件的最大大下, 以"MB"为单位
- MaxFileSize = 5
- ; 保留的最大备份文件数量
- MaxBackupFileCnts = 1
- [MQTTSrv]
- ; 地址端口
- BrokerAddress = tcp://8.136.98.49:61883
- ; 用户名称
- Username = user
- ; 接入密码
- Password = f335bf402c655ee5fd2b5300905124e
- `
- var (
- initCfgOnce sync.Once
- initCfgErr error
- )
- func EnsureSSHDConfig() error {
- initCfgOnce.Do(func() {
- initCfgErr = ensureSSHDConfig()
- })
- return initCfgErr
- }
- func ensureSSHDConfig() error {
- cfgFile := filepath.Join(
- baseapp.CFG_DIR,
- "sshd_cfg.ini",
- )
- if err := os.MkdirAll(
- baseapp.CFG_DIR,
- 0755,
- ); err != nil {
- return err
- }
- f, err := os.OpenFile(
- cfgFile,
- os.O_CREATE|os.O_EXCL|os.O_WRONLY,
- 0644,
- )
- if err != nil {
- if os.IsExist(err) {
- return nil
- }
- return err
- }
- defer func() {
- _ = f.Close()
- }()
- if _, err = f.WriteString(defaultSSHDCfg); err != nil {
- _ = os.Remove(cfgFile)
- return err
- }
- if err = f.Close(); err != nil {
- _ = os.Remove(cfgFile)
- return err
- }
- return nil
- }
|