跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 除了使用 nohup,生产环境如何启动 Java 应用?
未分類
16 11 月 2020

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

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

資深大佬 : zealinux 4

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

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

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

有没有合适的方法?

ubuntu 18.04 Java 1.8

大佬有話說 (57)

  • 資深大佬 : echowuhao

    systemd

  • 資深大佬 : kiddingU

    很多呀,比如 supervisor

  • 資深大佬 : securityCoding

    多节点部署,简单点前面可以挂个 nginx 定时检查 api,单节点再折腾也没法保证高可用性。

  • 資深大佬 : Xusually

    自己写一套 systemctl 脚本,或者用 systemd

  • 資深大佬 : JokerLiang

    上 docker

  • 資深大佬 : yalin

    system V

  • 資深大佬 : cike

    systemd
    supervisor

  • 資深大佬 : msg7086

    用正确的方法呗(指用服务管理器)。

  • 資深大佬 : GM

    java service wrapper,a.k.a jsw 值得你拥有。

  • 資深大佬 : dark3212

    supervisor
    就算用 nohup 你也可以添加到开机启动命令里来达到重启自动启动的效果。

  • 資深大佬 : yanzhiling2001

    systemd 开机自启动
    开始我还以为要后台运行,用 nohup

  • 資深大佬 : xiaoz

    systemd 吧,挺方便的。

  • 資深大佬 : zifangsky

    这个帖子不错,很有参考价值,感谢各位的回答!

  • 資深大佬 : FullBridgeRect

    systemd supervisord 这些服务管理器都不错

  • 資深大佬 : kiddingU

    systemd supervisor docker k8s 都行~~

  • 資深大佬 : Cbdy

    systemd

  • 資深大佬 : kingfalse

    搞个简单的 shell 脚本死循环,完美解决
    #!/bin/bash
    while [ 1 ]
    do
    java -jar xxx.jar
    done

  • 資深大佬 : kingfalse

    一个敢死,一个敢埋,稳的一批

  • 資深大佬 : oneisall8955

    @kingfalse #17 你的操作 666 !

  • 資深大佬 : Weixiao0725

    java 这种已经屏蔽底层的语言还要外面再包个 docker,套娃吗?

  • 資深大佬 : wtks1

    最简单的,写个脚本监控,挂在定时任务里

  • 資深大佬 : deplives

    supervisor

  • 資深大佬 : cheng6563

    给你个 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

    @cheng6563 少写了 systemctl daemon-reload

  • 資深大佬 : xmge

    supervisor 这个很方便

  • 資深大佬 : chaffy

    crond 不就 OK 了吗,检测下进程

  • 資深大佬 : noqwerty

    我们现在图省事就全放 docker 了,如果单纯管理进程的话 systemd, supervisor, pm2 任选一个都可以,稳定性都很不错,这三个里面个人认为 pm2 最方便

  • 資深大佬 : Kirsk

    看起来都很麻烦 不用容器其他情况下 service 软链接 jar 包直接跑

  • 資深大佬 : zengming00

    pm2 start 可执行命令 — 参数 // 参数前是两个连续的减号,这样参数才能传递进可执行命令
    pm2 save // 保存当前运行的列表,这样在系统重启时才能自动恢复

  • 資深大佬 : julyclyde

    需要一个父进程监听 SIGCHLD 信号
    nohup 显然是错误的,并不是一种选择

  • 資深大佬 : autogen

    jar 现在不都是放 docker 里跑吗

  • 資深大佬 : qbhy

    docker

  • 資深大佬 : Selenium39

    @zengming00 这个除了 nodejs,java 也能用的吗?

  • 資深大佬 : sagaxu

    我提供个简单方便的野路子

    用 systemd 管理 supervisord,然后用 supervisord 管理 java 服务

  • 資深大佬 : guochao

    你问的这个问题一般由 supervisor 类应用解决。

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

    容器勉勉强强也可以算作一类 supervisor,也支持一部分的资源管理和自动化嘛,比如说 docker 、podman 。而且也有多机方案,最典型的就是 k8s 、docker swarm 这类容器编排工具。

  • 資深大佬 : gesse

    还有更简单点 pm2

  • 資深大佬 : dorothyREN

    supervisor,systemd, pm2,tomcat

  • 資深大佬 : phoolean

    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

    直接用 systemd 不就好了,整什么 pm2 supervisor 最后还不是依赖 systemd 。。

  • 資深大佬 : anansi

    supervisor

  • 資深大佬 : akira

    别抢运维的活。。

  • 資深大佬 : 3t

    最近上手了 pm2,改两行配置代码就行了,自带自动重启

  • 資深大佬 : Illusionary

    2021 年了还不上 docker ?

  • 資深大佬 : namelosw

    怕吗? 怕就 Kubernetes.

  • 資深大佬 : chenhbang

    systemd . supervisor . docker

  • 資深大佬 : wongy

    https://github.com/mojohaus/appassembler
    Java Service Wrapper 是我目前使用的打包执行工具

  • 資深大佬 : Fanx

    写 systemd

  • 資深大佬 : zengming00

    @Selenium39 以前 pm2 是 nodejs 专用,现在 pm2 已经是通用的了

  • 資深大佬 : dooonabe

    setsid

  • 資深大佬 : sampeng

    生产环境表示干了十年也没用 nohub 跑业务。临时几分钟脚本偶尔用

  • 資深大佬 : yishenggudou

    supervisor 正解

  • 資深大佬 : IgniteWhite

    介于 nohup 和 service 之间还可以写个开机启动的 tmux 脚本

  • 資深大佬 : FlexGap

    实在嫌烦就上 PM2

  • 資深大佬 : goodboy95

    以前用 supervisor,后来公司开始大力推 docker (不过让我们连 nginx 都搭在 docker 上是我万万没有想到的,我过了一年都没想出这么干有什么好处)

  • 資深大佬 : julyclyde

    @goodboy95 确实没什么好处。就是一种病

  • 資深大佬 : julyclyde

    @IgniteWhite 这个显然不靠谱

  • 資深大佬 : IgniteWhite

    @julyclyde 资源占用来说 tmux session 当然比系统 service 稍大,但是靠谱不靠谱得看脚本怎么写。不过脚本如果做成了 service 用 tmux 就没有意义了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具