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