V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

求教,如何检测 ss 心跳包? 或者如何检测 ss 节点是否连通?

  •  
  •   Ehco1996 · 9 天前 · 2179 次点击

    最近用 django 写了个 sspanel,

    项目在这: https://github.com/Ehco1996/django-sspanel

    Demo: http://www.ehcozone.club

    现在希望能够判断一下 节点的运行状态,并返回检测值,

    现在网上好多资料都没有了,查了好久,貌似需要检测心跳包?

    不太明白相关的知识

    谁能给个思路么?

    第 1 条附言  ·  9 天前

    已经找到办法了,

    用这条命令就能检测进程是否再运行了。

    ps -ef | grep server.py| grep -v grep | wc -l

    20 回复  |  直到 2017-08-13 19:22:17 +08:00
        1
    pqee   9 天前 via Android
    都写 sspanel 了这个搞不定不科学呀……怎么和 ssserver 通信的…
        2
    blankme   9 天前
    如果是检测进程是否在运行:pgrep ssserver
    如果是检测 ss 能不能用,在监控机上用 sslocal 连你的 ss,然后:proxychains4 curl ifconfig.co

    两者都是不需要深度知识的方法
        3
    Ehco1996   9 天前 via iPhone
    @pqee 前端和 server 是通过数据库通讯的,关于 ss 是如何运行的我还真不太明白...
        4
    Ehco1996   9 天前 via iPhone
    @blankme

    谢谢回复,
    我用的还是 manyuser python 版,
    运行是通过 run.sh 运行人,
    用 ps 一下,检测不到进程....

    我刚去试了 用 pgrep ssserver 也检测不到进程

    请问怎么办?

    感谢!
        5
    zhengxiaowai   9 天前
    歪个楼,怎么检测流量?
        6
    vh2h   9 天前
    不会,先给顶一个!
        7
    blankme   9 天前
    @Ehco1996
    run.sh 里面,在运行之前它会先找到正在运行的 process,然后 kill,再重新启动。(我看到的这个版本是这样的)
    你改改就变成检测是否运行的脚本了,大致是 pgrep python 这样,run.sh 里面做得更详细。
        8
    Ehco1996   9 天前
    @zhengxiaowai user 表里的 u+d 就是流量了


    @blankme 知道怎么做了, 脚本运行的话 进程是 server.py

    用这条命令就行了就能检测到了
    ps -ef | grep server.py| grep -v grep | wc -l

    再次感谢
        9
    zhengxiaowai   9 天前
    @Ehco1996 我是说你是怎么实现流量统计的

    ps -ef | grep server.py| grep -v grep | wc -l 并不准确,我我有一个 server.py 的脚本启动也会统计进去

    1. 找一下 ss server 启动时候没有存储 pid 的参数
    2. 比较好的方法是利用 supervisor 启动,然后监控 supervisor 的进程
    3. 如果不想用 supervisor 的话,你可自己写一个 daemon 启动然后 fork 子进程出来启动 ss 后台,然后记下 pid
        10
    timothyye   9 天前 via Android
    或者用 lsof 判断 ss 有没有监听端口,有的话表明程序还在运行
        11
    pqee   9 天前 via Android
    通过数据库通信……莫非你后端用的不是官方 server ……
        12
    pqee   9 天前
    不需要用多用户版,直接用官方的 Python 实现就可以,可以参考: https://github.com/ZhuFaner/shadowsocks-manage-system
        13
    Ehco1996   9 天前
    @blankme
    @timothyye
    谢谢,一会我去试试看

    @pqee
    我用的后端还是破娃的最后一次更新的版本,
    接口用的是 sspanelv2

    也没找到开发的文档,不知道怎么拓展,

    你写得管理系统很棒哎! 不过不会 php,没找到你是怎么检测的
        14
    pqee   9 天前 via Android
    @Ehco1996 是直接跟 ssserver 进程进行 udp 数据交换,每次发数据都会收到返回,判断返回就知道是否存活了。
        16
    smileawei   9 天前
    可以开个固定端口。然后监控那个端口在不在 netstat -ntpl |grep 443 |wc -l
        17
    coderfox   9 天前 via Android   ♥ 1
    你读一下 fsgmhoward 的 mu 的代码,这个版本会向服务器主动推送心跳包表达节点所在服务器状态的。
        18
    fzinfz   9 天前   ♥ 1
    又发现一神器: https://github.com/sorz/ssmanager
        19
    NoAnyLove   8 天前
    我有点懵逼啊,ss 不是预留了一个 manager 接口吗? Python 版和 libev 版都支持的,一般默认采用 unix socket 进行通讯,发送 ping 命令就能得到统计数据。这难道不就是个现成的非常好用的心跳检查吗?直接判断进程名,不怕同名(虽然不太可能)或者服务端卡死了吗?虽然检查进程名不是不可以,不过总感觉有点不专业啊。
        20
    Ehco1996   8 天前
    @NoAnyLove
    @fzinfz

    那个 manager 接口很好用,但是如果想要用这个 api 必须再 manager mode 下才能进行操作,

    而我的后端是运行在 mysql manyuser 下的, 接口用的 sspanelv2

    看起来貌似也只能先用判断进程名的方法了。

    再次感谢!
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   745 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 51ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1