除了使用 nohup,生产环境如何启动 Java 应用?
现在都是使用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
“`
[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
“`
用 systemd 管理 supervisord,然后用 supervisord 管理 java 服务
最出名的就是 systemd 、supervisord 、sysv init 、upstart,不需要写很多脚本,本身就支持比如重启啊、依赖关系啊什么的。推荐直接上手 systemd,除非版本不一样,系统间差异较小且稳定,对于进程服务之外的资源依赖也可以处理到。都是单机的
容器勉勉强强也可以算作一类 supervisor,也支持一部分的资源管理和自动化嘛,比如说 docker 、podman 。而且也有多机方案,最典型的就是 k8s 、docker swarm 这类容器编排工具。