V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangxiaoaer
V2EX  ›  问与答

Java 进程管理

  •  
  •   wangxiaoaer · 2018-06-10 18:57:54 +08:00 · 2840 次点击
    这是一个创建于 2350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器上的 java web 应用,通过 java -jar xx.jar 运行。

    怎么方便的管理这些进程?类似 pm2 管理 nodejs 的应用一样?

    试过 supervisor,感觉不舒服,还有么有类似的?

    第 1 条附言  ·  2018-06-10 19:40:04 +08:00
    我说进程管理其实是指方便的查看状态、启动、停止、重启等。
    18 条回复    2018-06-11 11:30:51 +08:00
    GuryYu
        1
    GuryYu  
       2018-06-10 19:37:13 +08:00 via iPhone
    可以考虑用 docker,一个进程一个容器
    rockyou12
        2
    rockyou12  
       2018-06-10 19:41:19 +08:00
    打包成 docker image 是最好,最方便的。
    wangxiaoaer
        3
    wangxiaoaer  
    OP
       2018-06-10 19:44:10 +08:00
    docker 不考虑。服务器就这一个应用,不需要容器化。
    hcymk2
        4
    hcymk2  
       2018-06-10 20:07:41 +08:00
    pm2 可以管理脚本。
    Cbdy
        5
    Cbdy  
       2018-06-10 20:09:14 +08:00 via Android
    po 的这个问题我也思考过,路径和你一样,也尝试过用 pm2、Supervisor、Docker。问题都比较明显。pm2 虽然可以,但是它始终还是为 Node.js 设计的。Supervisor 用需要 Python,直接不考虑。Docker 总的来说是比较好的方案,可以考虑采用外挂 volume 的“轻量”容器化方案,基本能达到和 pm2 类似的效果

    如果确实不考虑 Docker,可以试试我写的一个启停 Shell 脚本,应用状态可以用类似 JMX 的方案
    脚本:
    https://github.com/cbdyzj/boot/blob/master/bin/bootstrap
    hcymk2
        6
    hcymk2  
       2018-06-10 20:12:00 +08:00
    @Cbdy
    Shell 改改其实就可以直接用 systemd.service 了。
    Cbdy
        7
    Cbdy  
       2018-06-10 20:20:57 +08:00 via Android
    @hcymk2 对的,如果是稳定的服务,注册成 systemd 或者 SysV 服务当然最好了,如果需要经常发布,就显得不灵活了
    wangxiaoaer
        8
    wangxiaoaer  
    OP
       2018-06-10 20:47:16 +08:00 via Android
    @Cbdy 多谢,我试试这个脚本吧。
    SoloCompany
        9
    SoloCompany  
       2018-06-10 22:51:01 +08:00 via iPhone
    wdlth
        10
    wdlth  
       2018-06-10 23:10:24 +08:00
    可以做成服务,用系统自己的服务管理。
    mritd
        11
    mritd  
       2018-06-11 10:16:24 +08:00 via iPhone
    说了这么多,你们就没人研究下现代系统自身的 systemd 么?
    wangxiaoaer
        12
    wangxiaoaer  
    OP
       2018-06-11 10:33:39 +08:00
    @mritd #11 太复杂,没有看下去的欲望。

    非系统级或者大型产品化的应用,我觉得没必要上这个。
    mritd
        13
    mritd  
       2018-06-11 10:44:44 +08:00
    @wangxiaoaer #12 这玩意复杂?单独切割守护类的服务写一个配置文件就完事,不超过 20 行;上面 pm2、Supervisor、docker 那个玩意不比这个重
    wangxiaoaer
        14
    wangxiaoaer  
    OP
       2018-06-11 10:50:59 +08:00
    @mritd #13
    其他没用过,我说下 PM2 我是怎么用的:

    npm install pm2 -g
    cd ...../app
    pm2 start server.js --name n

    还有比这个还简单的?这也不算重吧。
    mritd
        15
    mritd  
       2018-06-11 10:59:15 +08:00
    @wangxiaoaer #14

    centos7+、debian9+、ubuntu16+ 无需安装任何环境(nodejs/python),系统级托管服务

    cat > /lib/systemd/system/xxxx.service <<EOF
    [Unit]
    Description=xxxxxx
    After=network.target
    After=network-online.target
    Wants=network-online.target

    [Service]
    Type=simple
    ExecStart=/path/to/java -jar xxxx.jar
    Restart=on-failure
    LimitNOFILE=65536

    [Install]
    WantedBy=multi-user.target
    EOF

    systemctl daemon-reload && systemctl start xxxx
    wangxiaoaer
        16
    wangxiaoaer  
    OP
       2018-06-11 11:20:54 +08:00
    @mritd #15 还不错 :) 我参考下。
    mritd
        17
    mritd  
       2018-06-11 11:28:50 +08:00   ❤️ 1
    @wangxiaoaer #16
    看你需求就是需要启动停止啥的
    systemctl start xxxx
    systemctl stop xxxx
    systemctl restart xxxx
    systemctl status xxxx

    如果你的日志打到了 STDOUT,那么使用 journalctl -fu xxxx 观察日志(-f 持续监测)
    不过 java 一般都是 logback 啥的送到具体文件了吧

    安全性需求强你可以看下 systemd service 怎么使用特定用户运行
    wangxiaoaer
        18
    wangxiaoaer  
    OP
       2018-06-11 11:30:51 +08:00
    @mritd #17 好的,多谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2656 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:27 · PVG 18:27 · LAX 02:27 · JFK 05:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.