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

除了使用 nohup,生产环境如何启动 Java 应用?

  •  
  •   zealinux · 54 天前 · 4860 次点击
    这是一个创建于 54 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在都是使用nohup java -jar x.jar > /tmp/x.log 2>&1 &

    但其实没考虑到一个问题,如果云上虚拟机器挂了,或重启了。(这个发生过) 就需要自己手动去启动。

    如果事故发生再夜里,手动启动就相当痛苦。

    有没有合适的方法?

    ubuntu 18.04 Java 1.8

    57 条回复    2020-12-03 03:42:09 +08:00
    echowuhao
        1
    echowuhao   54 天前   ❤️ 2
    systemd
    kiddingU
        2
    kiddingU   54 天前   ❤️ 2
    很多呀,比如 supervisor
    securityCoding
        3
    securityCoding   54 天前
    多节点部署,简单点前面可以挂个 nginx 定时检查 api,单节点再折腾也没法保证高可用性。
    Xusually
        4
    Xusually   54 天前
    自己写一套 systemctl 脚本,或者用 systemd
    JokerLiang
        5
    JokerLiang   54 天前
    上 docker
    yalin
        6
    yalin   54 天前
    system V
    cike
        7
    cike   54 天前
    systemd
    supervisor
    msg7086
        8
    msg7086   54 天前 via Android
    用正确的方法呗(指用服务管理器)。
    GM
        9
    GM   54 天前
    java service wrapper,a.k.a jsw 值得你拥有。
    dark3212
        10
    dark3212   54 天前
    supervisor
    就算用 nohup 你也可以添加到开机启动命令里来达到重启自动启动的效果。
    yanzhiling2001
        11
    yanzhiling2001   54 天前
    systemd 开机自启动
    开始我还以为要后台运行,用 nohup
    xiaoz
        12
    xiaoz   54 天前 via Android
    systemd 吧,挺方便的。
    zifangsky
        13
    zifangsky   54 天前
    这个帖子不错,很有参考价值,感谢各位的回答!
    FullBridgeRect
        14
    FullBridgeRect   54 天前 via Android
    systemd supervisord 这些服务管理器都不错
    kiddingU
        15
    kiddingU   54 天前
    systemd supervisor docker k8s 都行~~
    Cbdy
        16
    Cbdy   54 天前
    systemd
    kingfalse
        17
    kingfalse   54 天前 via Android   ❤️ 1
    搞个简单的 shell 脚本死循环,完美解决
    #!/bin/bash
    while [ 1 ]
    do
    java -jar xxx.jar
    done
    kingfalse
        18
    kingfalse   54 天前 via Android
    一个敢死,一个敢埋,稳的一批
    oneisall8955
        19
    oneisall8955   54 天前
    @kingfalse #17 你的操作 666 !
    Weixiao0725
        20
    Weixiao0725   54 天前
    java 这种已经屏蔽底层的语言还要外面再包个 docker,套娃吗?
    wtks1
        21
    wtks1   54 天前 via Android
    最简单的,写个脚本监控,挂在定时任务里
    deplives
        22
    deplives   54 天前
    supervisor
    cheng6563
        23
    cheng6563   54 天前   ❤️ 10
    给你个 systemd 模板
    把那几个空白处填上,改名 xxx.service,扔到 /etc/systemd/system 里,然后 systemctl start xxx 启动服务,systemctl enable xxx 开启自动启动

    ```
    [Unit]
    Description=
    Wants=network-online.target
    After=network-online.target

    [Service]
    ExecStart=
    User=
    WorkingDirectory=
    Restart=on-failure
    RestartSec=3
    StartLimitBurst=10

    [Install]
    WantedBy=multi-user.target
    ```
    FreeEx
        24
    FreeEx   54 天前
    @cheng6563 少写了 systemctl daemon-reload
    xmge
        25
    xmge   54 天前
    supervisor 这个很方便
    chaffy
        26
    chaffy   54 天前
    crond 不就 OK 了吗,检测下进程
    noqwerty
        27
    noqwerty   54 天前
    我们现在图省事就全放 docker 了,如果单纯管理进程的话 systemd, supervisor, pm2 任选一个都可以,稳定性都很不错,这三个里面个人认为 pm2 最方便
    Kirsk
        28
    Kirsk   54 天前 via Android
    看起来都很麻烦 不用容器其他情况下 service 软链接 jar 包直接跑
    zengming00
        29
    zengming00   54 天前
    pm2 start 可执行命令 -- 参数 // 参数前是两个连续的减号,这样参数才能传递进可执行命令
    pm2 save // 保存当前运行的列表,这样在系统重启时才能自动恢复
    julyclyde
        30
    julyclyde   54 天前
    需要一个父进程监听 SIGCHLD 信号
    nohup 显然是错误的,并不是一种选择
    autogen
        31
    autogen   54 天前
    jar 现在不都是放 docker 里跑吗
    qbhy
        32
    qbhy   54 天前
    docker
    Selenium39
        33
    Selenium39   54 天前
    @zengming00 这个除了 nodejs,java 也能用的吗?
    sagaxu
        34
    sagaxu   54 天前 via Android   ❤️ 1
    我提供个简单方便的野路子

    用 systemd 管理 supervisord,然后用 supervisord 管理 java 服务
    guochao
        35
    guochao   54 天前
    你问的这个问题一般由 supervisor 类应用解决。

    最出名的就是 systemd 、supervisord 、sysv init 、upstart,不需要写很多脚本,本身就支持比如重启啊、依赖关系啊什么的。推荐直接上手 systemd,除非版本不一样,系统间差异较小且稳定,对于进程服务之外的资源依赖也可以处理到。都是单机的

    容器勉勉强强也可以算作一类 supervisor,也支持一部分的资源管理和自动化嘛,比如说 docker 、podman 。而且也有多机方案,最典型的就是 k8s 、docker swarm 这类容器编排工具。
    gesse
        36
    gesse   54 天前 via iPhone
    还有更简单点 pm2
    dorothyREN
        37
    dorothyREN   54 天前
    supervisor,systemd, pm2,tomcat
    phoolean
        38
    phoolean   54 天前
    pid=$(ps | grep java | grep -v grep | awk '{print $1}')
    #获取 java 的 pid
    if [ -z "$pid" ]
    #如果挂了
    then nohup java -jar x.jar > /tmp/x.log 2>&1 &
    #重启 java
    fi
    然后让脚本在 cron 里每分钟执行一次
    fuis
        39
    fuis   54 天前
    直接用 systemd 不就好了,整什么 pm2 supervisor 最后还不是依赖 systemd 。。
    anansi
        40
    anansi   54 天前
    supervisor
    akira
        41
    akira   54 天前
    别抢运维的活。。
    3t
        42
    3t   54 天前
    最近上手了 pm2,改两行配置代码就行了,自带自动重启
    Illusionary
        43
    Illusionary   54 天前
    2021 年了还不上 docker ?
    namelosw
        44
    namelosw   54 天前
    怕吗? 怕就 Kubernetes.
    chenhbang
        45
    chenhbang   54 天前
    systemd . supervisor . docker
    wongy
        46
    wongy   54 天前 via iPhone
    https://github.com/mojohaus/appassembler
    Java Service Wrapper 是我目前使用的打包执行工具
    Fanx
        47
    Fanx   54 天前
    写 systemd
    zengming00
        48
    zengming00   53 天前
    @Selenium39 以前 pm2 是 nodejs 专用,现在 pm2 已经是通用的了
    dooonabe
        49
    dooonabe   53 天前 via Android
    setsid
    sampeng
        50
    sampeng   53 天前 via iPhone
    生产环境表示干了十年也没用 nohub 跑业务。临时几分钟脚本偶尔用
    yishenggudou
        51
    yishenggudou   53 天前
    supervisor 正解
    IgniteWhite
        52
    IgniteWhite   53 天前 via iPhone
    介于 nohup 和 service 之间还可以写个开机启动的 tmux 脚本
    FlexGap
        53
    FlexGap   53 天前
    实在嫌烦就上 PM2
    goodboy95
        54
    goodboy95   53 天前
    以前用 supervisor,后来公司开始大力推 docker (不过让我们连 nginx 都搭在 docker 上是我万万没有想到的,我过了一年都没想出这么干有什么好处)
    julyclyde
        55
    julyclyde   53 天前
    @goodboy95 确实没什么好处。就是一种病
    julyclyde
        56
    julyclyde   53 天前
    @IgniteWhite 这个显然不靠谱
    IgniteWhite
        57
    IgniteWhite   52 天前 via iPhone
    @julyclyde 资源占用来说 tmux session 当然比系统 service 稍大,但是靠谱不靠谱得看脚本怎么写。不过脚本如果做成了 service 用 tmux 就没有意义了
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2891 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:58 · PVG 19:58 · LAX 03:58 · JFK 06:58
    ♥ Do have faith in what you're doing.