V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
darknoll
V2EX  ›  程序员

有没有什么方法能让 go 写的命令行程序在 windows 上以服务的方式运行

  •  
  •   darknoll · 5 天前 · 2965 次点击

    以 windows 服务的方式运行,避免误关闭之类的操作

    25 条回复    2021-06-12 17:28:32 +08:00
    fhy1994
        1
    fhy1994   5 天前
    在 win 上用 nssm 跑过 nginx 、php-cgi 、python 打包的可执行程序
    a342191555
        2
    a342191555   5 天前 via iPhone
    github.com/chai2010/winsvc 这个包可以

    如果用网络访问的话,记得还要在防火墙添加例外
    iminto
        3
    iminto   5 天前   ❤️ 1
    用自带的 sc create 命令就行,也可以用一些第三方的 wrapper,比如 winsw
    catcn
        4
    catcn   5 天前
    2 楼的这个是正解,用过。
    chenyi
        5
    chenyi   5 天前
    nssm 用过,可以实现
    Rwing
        6
    Rwing   5 天前   ❤️ 2
    不考虑一下 C#吗,也可以跨平台,独立文件分发,不用运行时。最主要的,可以很爽的用泛型 🙂
    zengming00
        7
    zengming00   5 天前
    如果你还玩 nodejs 的话,pm2 是个不错的选择,因为在所有平台都通用
    直接一条命令搞定(注意你的程序与参数之间有两个减号)
    pm2 start 你的程序 -- 传递给你程序的参数
    tsungkang
        8
    tsungkang   5 天前
    纯粹只考虑 windows 服务的话,可以直接 golang.org/x/sys/windows/svc 一把梭
    araraloren
        9
    araraloren   5 天前
    @Rwing 很爽的泛型 哈哈。。
    anubu
        10
    anubu   5 天前   ❤️ 1
    对比过 nssm 和 winsw,nssm 虽然较久没更新,但更好用。最简单的方法是使用 powershell 命令,两三句命令就能搞定,如果不考虑大量程序管理维护的话,是不错的方法。
    dream4ever
        12
    dream4ever   5 天前
    @zengming00 PM2 +1,公司买的阿里云服务器装的是 Windows Server 2012,之前解决了 PM2 在注销远程桌面连接后会自动退出的问题后,就彻底省心了,PM2 从几年前用到现在,很方便。
    iseki
        13
    iseki   5 天前
    @anubu 欸,一直想不起来这个好用的叫什么名字,这下好了
    PhaSelEza
        15
    PhaSelEza   5 天前   ❤️ 1
    如果只是要后台运行,而且程序不需要接受命令行输入的话,可以用:
    if len(os.Args) == 1 {
    exec.Command("cmd.exe", "/C", "start", "/B", os.Args[0], "flag").Run()
    os.Exit(0)
    }
    syscall.NewLazyDLL("kernel32.dll").NewProc("FreeConsole").Call()
    0o0O0o0O0o
        16
    0o0O0o0O0o   5 天前 via iPhone
    建议用 winsw 专门来做这个事
    johnsona
        17
    johnsona   5 天前 via iPhone
    nssm
    anubu
        18
    anubu   5 天前
    @mmtromsb456 是的,简单够用,无额外依赖。
    emric
        20
    emric   5 天前
    我写过 bat 就那么几句命令,简单的很。
    https://gist.github.com/17/8853168
    bigtan
        21
    bigtan   5 天前 via iPhone
    @mmtromsb456 一直用 nssm,这个 cmdlet 感觉更优雅
    codehz
        23
    codehz   5 天前 via Android
    @PhaSelEza 这样会话退出以后还是会被干掉的(
    ch2
        24
    ch2   5 天前
    nssm 是最好的,各种都试过
    lqzhgood
        25
    lqzhgood   4 天前 via Android
    Pm2 windows 上服务有坑~
    只能说可用
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1266 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 17:49 · PVG 01:49 · LAX 10:49 · JFK 13:49
    ♥ Do have faith in what you're doing.