Java 进程管理

2018-06-10 18:57:54 +08:00
 wangxiaoaer

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

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

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

2841 次点击
所在节点    问与答
18 条回复
GuryYu
2018-06-10 19:37:13 +08:00
可以考虑用 docker,一个进程一个容器
rockyou12
2018-06-10 19:41:19 +08:00
打包成 docker image 是最好,最方便的。
wangxiaoaer
2018-06-10 19:44:10 +08:00
docker 不考虑。服务器就这一个应用,不需要容器化。
hcymk2
2018-06-10 20:07:41 +08:00
pm2 可以管理脚本。
Cbdy
2018-06-10 20:09:14 +08:00
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
2018-06-10 20:12:00 +08:00
@Cbdy
Shell 改改其实就可以直接用 systemd.service 了。
Cbdy
2018-06-10 20:20:57 +08:00
@hcymk2 对的,如果是稳定的服务,注册成 systemd 或者 SysV 服务当然最好了,如果需要经常发布,就显得不灵活了
wangxiaoaer
2018-06-10 20:47:16 +08:00
@Cbdy 多谢,我试试这个脚本吧。
SoloCompany
2018-06-10 22:51:01 +08:00
wdlth
2018-06-10 23:10:24 +08:00
可以做成服务,用系统自己的服务管理。
mritd
2018-06-11 10:16:24 +08:00
说了这么多,你们就没人研究下现代系统自身的 systemd 么?
wangxiaoaer
2018-06-11 10:33:39 +08:00
@mritd #11 太复杂,没有看下去的欲望。

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

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

还有比这个还简单的?这也不算重吧。
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
2018-06-11 11:20:54 +08:00
@mritd #15 还不错 :) 我参考下。
mritd
2018-06-11 11:28:50 +08:00
@wangxiaoaer #16
看你需求就是需要启动停止啥的
systemctl start xxxx
systemctl stop xxxx
systemctl restart xxxx
systemctl status xxxx

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

安全性需求强你可以看下 systemd service 怎么使用特定用户运行
wangxiaoaer
2018-06-11 11:30:51 +08:00
@mritd #17 好的,多谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX