现在都是使用nohup java -jar x.jar > /tmp/x.log 2>&1 &
但其实没考虑到一个问题,如果云上虚拟机器挂了,或重启了。(这个发生过) 就需要自己手动去启动。
如果事故发生再夜里,手动启动就相当痛苦。
有没有合适的方法?
ubuntu 18.04 Java 1.8
现在都是使用nohup java -jar x.jar > /tmp/x.log 2>&1 &
但其实没考虑到一个问题,如果云上虚拟机器挂了,或重启了。(这个发生过) 就需要自己手动去启动。
如果事故发生再夜里,手动启动就相当痛苦。
有没有合适的方法?
ubuntu 18.04 Java 1.8
|
1
systemd
|
|
2
很多呀,比如 supervisor
|
|
securityCodingDec 1, 2020
3
多节点部署,简单点前面可以挂个 nginx 定时检查 api,单节点再折腾也没法保证高可用性。
|
|
XusuallyDec 1, 2020
4
自己写一套 systemctl 脚本,或者用 systemd
|
|
JokerLiangDec 1, 2020
5
上 docker
|
|
yalinDec 1, 2020
6
system V
|
|
cikeDec 1, 2020
7
systemd
supervisor |
|
msg7086Dec 1, 2020 via Android
8
用正确的方法呗(指用服务管理器)。
|
|
GMDec 1, 2020
9
java service wrapper,a.k.a jsw 值得你拥有。
|
|
dark3212Dec 1, 2020
10
supervisor
就算用 nohup 你也可以添加到开机启动命令里来达到重启自动启动的效果。 |
|
40EaE5uJO3Xt1VVaDec 1, 2020
11
systemd 开机自启动
开始我还以为要后台运行,用 nohup |
|
xiaozDec 1, 2020 via Android
12
systemd 吧,挺方便的。
|
|
zifangskyDec 1, 2020
13
这个帖子不错,很有参考价值,感谢各位的回答!
|
|
FullBridgeRectDec 1, 2020 via Android
14
systemd supervisord 这些服务管理器都不错
|
|
kiddingUDec 1, 2020
15
systemd supervisor docker k8s 都行~~
|
|
CbdyDec 1, 2020
16
systemd
|
|
17
搞个简单的 shell 脚本死循环,完美解决
#!/bin/bash while [ 1 ] do java -jar xxx.jar done |
|
kingfalseDec 1, 2020 via Android
18
一个敢死,一个敢埋,稳的一批
|
|
Weixiao0725Dec 1, 2020
20
java 这种已经屏蔽底层的语言还要外面再包个 docker,套娃吗?
|
|
wtks1Dec 1, 2020 via Android
21
最简单的,写个脚本监控,挂在定时任务里
|
|
deplivesDec 1, 2020
22
supervisor
|
|
23
给你个 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 ``` |
|
dushixiangDec 1, 2020
24
@cheng6563 少写了 systemctl daemon-reload
|
|
xmgeDec 1, 2020
25
supervisor 这个很方便
|
|
chaffyDec 1, 2020
26
crond 不就 OK 了吗,检测下进程
|
|
noqwertyDec 1, 2020
27
我们现在图省事就全放 docker 了,如果单纯管理进程的话 systemd, supervisor, pm2 任选一个都可以,稳定性都很不错,这三个里面个人认为 pm2 最方便
|
|
KirskDec 1, 2020 via Android
28
看起来都很麻烦 不用容器其他情况下 service 软链接 jar 包直接跑
|
|
zengming00Dec 1, 2020
29
pm2 start 可执行命令 -- 参数 // 参数前是两个连续的减号,这样参数才能传递进可执行命令
pm2 save // 保存当前运行的列表,这样在系统重启时才能自动恢复 |
|
julyclydeDec 1, 2020
30
需要一个父进程监听 SIGCHLD 信号
nohup 显然是错误的,并不是一种选择 |
|
autogenDec 1, 2020
31
jar 现在不都是放 docker 里跑吗
|
|
qbhyDec 1, 2020
32
docker
|
|
Selenium39Dec 1, 2020
33
@zengming00 这个除了 nodejs,java 也能用的吗?
|
|
34
我提供个简单方便的野路子
用 systemd 管理 supervisord,然后用 supervisord 管理 java 服务 |
|
guochaoDec 1, 2020
35
你问的这个问题一般由 supervisor 类应用解决。
最出名的就是 systemd 、supervisord 、sysv init 、upstart,不需要写很多脚本,本身就支持比如重启啊、依赖关系啊什么的。推荐直接上手 systemd,除非版本不一样,系统间差异较小且稳定,对于进程服务之外的资源依赖也可以处理到。都是单机的 容器勉勉强强也可以算作一类 supervisor,也支持一部分的资源管理和自动化嘛,比如说 docker 、podman 。而且也有多机方案,最典型的就是 k8s 、docker swarm 这类容器编排工具。 |
|
gesseDec 1, 2020 via iPhone
36
还有更简单点 pm2
|
|
dorothyRENDec 1, 2020
37
supervisor,systemd, pm2,tomcat
|
|
phooleanDec 1, 2020
38
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 里每分钟执行一次 |
|
fuisDec 1, 2020
39
直接用 systemd 不就好了,整什么 pm2 supervisor 最后还不是依赖 systemd 。。
|
|
anansiDec 1, 2020
40
supervisor
|
|
akiraDec 1, 2020
41
别抢运维的活。。
|
|
3tDec 1, 2020
42
最近上手了 pm2,改两行配置代码就行了,自带自动重启
|
|
IllusionaryDec 1, 2020
43
2021 年了还不上 docker ?
|
|
nameloswDec 1, 2020
44
怕吗? 怕就 Kubernetes.
|
|
chenhbangDec 1, 2020
45
systemd . supervisor . docker
|
|
wongyDec 1, 2020 via iPhone
46
https://github.com/mojohaus/appassembler
Java Service Wrapper 是我目前使用的打包执行工具 |
|
FanxDec 1, 2020
47
写 systemd
|
|
zengming00Dec 1, 2020
48
@Selenium39 以前 pm2 是 nodejs 专用,现在 pm2 已经是通用的了
|
|
dooonabeDec 1, 2020 via Android
49
setsid
|
|
sampengDec 1, 2020 via iPhone
50
生产环境表示干了十年也没用 nohub 跑业务。临时几分钟脚本偶尔用
|
|
yishenggudouDec 1, 2020
51
supervisor 正解
|
|
FurN1Dec 2, 2020 via iPhone
52
介于 nohup 和 service 之间还可以写个开机启动的 tmux 脚本
|
|
FlexGapDec 2, 2020
53
实在嫌烦就上 PM2
|
|
goodboy95Dec 2, 2020
54
以前用 supervisor,后来公司开始大力推 docker (不过让我们连 nginx 都搭在 docker 上是我万万没有想到的,我过了一年都没想出这么干有什么好处)
|
|
julyclydeDec 2, 2020
56
@IgniteWhite 这个显然不靠谱
|
|
FurN1Dec 3, 2020 via iPhone
57
@julyclyde 资源占用来说 tmux session 当然比系统 service 稍大,但是靠谱不靠谱得看脚本怎么写。不过脚本如果做成了 service 用 tmux 就没有意义了
|
|
ql562482472Jul 10, 2023
58
@goodboy95 2 年半了 你明白有什么好处了吗
|
|
goodboy95Nov 20, 2025 via Android
59
@ql562482472 生产环境的话仍然不明白,不过开发环境倒是能轻松一点,各个项目自己写个 docker-compose ,一键启用。
|