V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wangxiaoaer
V2EX  ›  问与答

Java 进程管理

  •  
  •   wangxiaoaer · Jun 10, 2018 · 3214 views
    This topic created in 2881 days ago, the information mentioned may be changed or developed.

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

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

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

    Supplement 1  ·  Jun 10, 2018
    我说进程管理其实是指方便的查看状态、启动、停止、重启等。
    18 replies    2018-06-11 11:30:51 +08:00
    GuryYu
        1
    GuryYu  
       Jun 10, 2018 via iPhone
    可以考虑用 docker,一个进程一个容器
    rockyou12
        2
    rockyou12  
       Jun 10, 2018
    打包成 docker image 是最好,最方便的。
    wangxiaoaer
        3
    wangxiaoaer  
    OP
       Jun 10, 2018
    docker 不考虑。服务器就这一个应用,不需要容器化。
    hcymk2
        4
    hcymk2  
       Jun 10, 2018
    pm2 可以管理脚本。
    Cbdy
        5
    Cbdy  
       Jun 10, 2018 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  
       Jun 10, 2018
    @Cbdy
    Shell 改改其实就可以直接用 systemd.service 了。
    Cbdy
        7
    Cbdy  
       Jun 10, 2018 via Android
    @hcymk2 对的,如果是稳定的服务,注册成 systemd 或者 SysV 服务当然最好了,如果需要经常发布,就显得不灵活了
    wangxiaoaer
        8
    wangxiaoaer  
    OP
       Jun 10, 2018 via Android
    @Cbdy 多谢,我试试这个脚本吧。
    SoloCompany
        9
    SoloCompany  
       Jun 10, 2018 via iPhone
    wdlth
        10
    wdlth  
       Jun 10, 2018
    可以做成服务,用系统自己的服务管理。
    mritd
        11
    mritd  
       Jun 11, 2018 via iPhone
    说了这么多,你们就没人研究下现代系统自身的 systemd 么?
    wangxiaoaer
        12
    wangxiaoaer  
    OP
       Jun 11, 2018
    @mritd #11 太复杂,没有看下去的欲望。

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

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

    还有比这个还简单的?这也不算重吧。
    mritd
        15
    mritd  
       Jun 11, 2018
    @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
       Jun 11, 2018
    @mritd #15 还不错 :) 我参考下。
    mritd
        17
    mritd  
       Jun 11, 2018   ❤️ 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
       Jun 11, 2018
    @mritd #17 好的,多谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2467 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 08:05 · PVG 16:05 · LAX 01:05 · JFK 04:05
    ♥ Do have faith in what you're doing.