java -jar与nohup

java程序员,经常会遇到这样一个问题,打个jar包,测试或者上线生产,于是乎面临的选择来了,java –jar or nohup? 下面我来扒一扒:

java -jar a.jar &

直接启动jar文件,在当前会话进程中开启一个子进程来运行程序,这个子进程会随着会话进程的结束而结束。

这种情况适合短时间测试用。

nohup java -jar a.jar &

hangup :(挂断),终端退出时会发送 hangup 信号来通知其关闭所有子进程。

nohup :(不挂断,忽略挂断信号)。

nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用”>filename2>&1”来更改缺省的重定向文件名。

这种情况适合在生产环境长时间运行。

nodejs应用在linux上运行

使用场景

  • forever管理多个站点,每个站点访问量不大,不需要监控。
  • supervisor是开发环境用。
  • nodemon 是开发环境使用,修改自动重启。
  • pm2 网站访问量比较大,需要完整的监控界面。
  1. forever

    1
    2
    3
    4
    5
    6
    npm install -g forever
    forever start index.js -o out.log -e err.log
    forever list
    forever stop index.js [id]
    forever stopall
    forever restartall
  2. supervisor 热部署

    1
    2
    npm install -g supervisor
    supervisor app.js // 文件有改动会立即重启node模块
  3. nodemon

    1
    2
    npm install -g nodemon
    nodemon app.js
  4. nohup

    1
    2
    nohup node index.js &
    nohup node index.js > myLog.log 2>&1 &

nohup问题:

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,查看nohup.out可以看到在关闭终端瞬间服务自动关闭。 有个操作终端时的细节:当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端; 而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

  1. 高大上的pm2

特性:

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载,维护升级的时候不需要停机
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

使用:

1
2
3
4
5
6
7
8
9
npm install -g pm2
pm2 start app.js -o out.log -e err.log
pm2 stop app.js
pm2 restart app.js
pm2 list
pm2 descibe [id]
pm2 monit // 查看cpu和内存使用
pm2 logs // 实时集中log处理
pm2 web // 浏览器查看
本文结束感谢您的阅读

本文标题:java -jar与nohup

文章作者:陈宇(cosyer)

发布时间:2018年11月13日 - 09:11

最后更新:2018年12月15日 - 13:12

原始链接:http://mydearest.cn/java%20-jar%E4%B8%8Enohup.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!