前言
无论在生产环境还是开发环境,当有多个项目的时候,不能开机自动启动是一个很崩溃的事情,鬼知道某个项目的服务器什么时候因为什么人会突然重启、断电、崩溃;
最终导致的结果就是本来一个周末、假期被临时电话通知启动程序;
并不是不找事的时候就没有事,所以无论任何时候,不想让事情找上门,任何事情上都解决完美不留尾巴;
开机自启动的方法有很多
优先选择【systemctl】方法:功能完善且支持服务监控、重启策略等高级特性
一、创建服务文件
在/etc/systemd/system/目录下新建.service文件,例如:
sudo vi /etc/systemd/system/myapp.service内容参考以下模板:
【修改】ExecStart为自己的应用启动命令;Description为自己的应用描述;
[Unit]
Description=My Java Application
After=network.target
[Service]
User=root
Type=simple
ExecStart=/usr/bin/java -jar /path/to/your-app.jar
Restart=on-failure
RestartSec=10s
TimeoutStartSec=0
KillMode=process
[Install]
WantedBy=multi-user.target编辑好后,:wq保存退出。
【字段解释】
[Unit]
Description=My Java Application # 服务描述 需改成自己的描述
After=network.target # 依赖网络服务
[Service]
User=root # 运行用户
Type=simple # 进程类型(后台服务用forking)默认为simple通过主进程启动
ExecStart=/usr/bin/java -jar /path/to/your-app.jar # 启动命令 修改为自己jar包的路径和按需调整启动命令
Restart=on-failure # 失败时自动重启
RestartSec=10s # 重启间隔
TimeoutStartSec=0 # 禁用启动超时 等待应用的启动时间,单位为秒,0表示禁用
KillMode=process # systemctl stop 会发送终止信号,允许 Java 应用优雅关闭(如 Spring Boot 处理 SIGTERM)
[Install]
WantedBy=multi-user.target # 多用户模式启动
二、加载并启用服务
sudo systemctl daemon-reload # 重新加载配置
sudo systemctl enable myapp # 设置开机自启
sudo systemctl start myapp # 立即启动服务三、验证服务状态
systemctl status myapp # 查看服务状态
journalctl -u myapp -f # 查看实时日志四、systemctl 常用命令
1、服务生命周期管理
启动服务:
systemctl start <服务名> # 例:启动 Nginx → systemctl start nginx停止服务:
systemctl stop <服务名> # 例:停止 Apache → systemctl stop apache2重启服务:
systemctl restart <服务名> # 例:重启 MySQL → systemctl restart mysql重载配置(不中断服务):
systemctl reload <服务名> # 例:重载 SSH → systemctl reload sshd2、服务状态查看
查看实时状态:
systemctl status <服务名> # 显示运行状态、日志片段及依赖关系检查是否正在运行:
systemctl is-active <服务名> # 返回 "active" 表示运行中检查是否开机自启:
systemctl is-enabled <服务名> # 返回 "enabled" 表示已设置自启检查是否启动失败:
systemctl is-failed <服务名> # 返回 "failed" 表示服务异常3、服务自启管理
启用开机自启:
systemctl enable <服务名> # 例:启用 Docker → systemctl enable docker禁用开机自启:
systemctl disable <服务名> # 例:禁用防火墙 → systemctl disable firewalld4、日志与单元管理
查看服务日志:
journalctl -u <服务名> # 例:查看 Apache 日志 → journalctl -u apache2列出所有已加载服务单元:
systemctl list-units --type=service列出所有开机自启服务:
systemctl list-unit-files --state=enabled5、系统级操作
重启系统:
systemctl reboot关机:
systemctl poweroff挂起(睡眠):
systemctl suspend休眠(保存到磁盘):
systemctl hibernate6、高级用法
管理用户级服务:
systemctl --user start <服务名> # 以当前用户身份运行服务(需配置用户级单元)远程管理服务:
systemctl -H user@host <命令> # 例:远程重启服务 → systemctl -H user@192.168.1.10 restart nginx查看服务依赖关系:
systemctl list-dependencies <服务名> # 正向依赖
systemctl list-dependencies --reverse <服务名> # 反向依赖