一、前言
服务器重启后,业务脚本、自定义程序、第三方服务会全部中断,想要程序开机自动运行,必须配置开机自启。本文讲解生产环境最常用3种开机自启方案,覆盖系统服务自启、脚本自启、自定义服务文件,零基础直接上手,无坑可直接上线。
二、方式一:systemctl 系统服务开机自启(官方推荐,首选)
适用于Nginx、MySQL、Docker等系统托管服务,也是企业标准规范,搭配之前systemctl服务管理命令联动使用。
1. 核心命令
# 设置开机自启 systemctl enable 服务名 # 取消开机自启 systemctl disable 服务名 # 查看服务是否开机自启 systemctl is-enabled 服务名 # 查看系统所有服务开机自启状态 systemctl list-unit-files2. 实战案例
# 设置nginx、mysqld、docker开机自启 systemctl enable nginx systemctl enable mysqld systemctl enable docker三、方式二:/etc/rc.local 文件开机自启(自定义脚本首选)
1. 原理
系统开机最后一步会自动执行/etc/rc.local文件内所有命令,适合自定义shell脚本、后台程序、一次性开机指令,无需编写复杂service文件,新手首选。
2. 前置关键(CentOS7+必须操作)
CentOS7之后rc.local默认无执行权限,直接配置不生效,必须先加执行权限:
chmod +x /etc/rc.d/rc.local3. 配置实战
# 编辑开机自启文件 vim /etc/rc.local # 文件末尾添加需要开机执行的命令/脚本,示例: # 1. 启动后端Java项目 nohup java -jar app.jar > /app/log.log 2>&1 & # 2. 挂载磁盘 mount /data # 3. 启动自定义shell脚本 sh /opt/start.sh4. 避坑要点
文件内命令必须写绝对路径,相对路径开机大概率失效
所有后台程序必须加nohup后台运行,否则开机卡住无法进入系统
不要在rc.local配置阻塞类前台程序
四、方式三:编写自定义 .service 系统服务文件(企业高阶用法)
1. 适用场景
需要统一用systemctl启停、查看状态、开机自启,需要托管进程,替代nohup后台程序。
2. 实战配置
# 1. 新建服务文件 vim /usr/lib/systemd/system/app.service # 写入以下内容 [Unit] Description=my java app service After=network.target [Service] Type=forking ExecStart=/usr/bin/nohup java -jar /opt/app.jar > /app/log.log 2>&1 & [Install] WantedBy=multi-user.target# 2. 重载系统服务 systemctl daemon-reload # 3. 启动服务+设置开机自启 systemctl start app systemctl enable app五、三种方式选型总结
官方自带服务:直接用systemctl enable
简单脚本、快速配置:用rc.local(90%新手场景)
需要统一托管运维:自定义service服务文件