服务公告
蓝易云cdn:centos软件设置开机启动的方式
发布时间:2026-01-18 00:08
在 CentOS 上把“软件/服务”做成开机自启动,本质是把启动动作纳入系统的启动编排里。生产环境我建议优先走 systemd(可控、可观测、可审计),能少踩很多坑。✅
先确认你的 CentOS 属于哪条启动链路

绝大多数 CentOS 7/8/Stream 9 都是 systemd:
ps -p 1 -o comm=
# 输出 systemd 就说明走 systemd
方式一(首选):systemd 直接启用已有服务 ⭐
适用于:Nginx/OpenResty、Redis、MySQL、Elasticsearch 等“已自带 service”的软件。
systemctl enable --now 服务名
systemctl status 服务名
常用排查(很关键)🔍:
journalctl -u 服务名 -b --no-pager
systemctl is-enabled 服务名
要点:enable 负责“开机拉起”,--now 负责“立刻启动”,一次到位。
方式二(最通用):为任意程序自建 systemd Unit(推荐用于自研程序/脚本)🚀
适用于:你自己的守护进程、蓝易云组件脚本、二进制程序、Python/Go/Node 服务等。
1)创建 unit 文件:
vi /etc/systemd/system/myapp.service
2)参考模板(直接可用,按需改路径/用户/参数):
[Unit]
Description=MyApp Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp --config /etc/myapp/config.yml
Restart=always
RestartSec=2
LimitNOFILE=1048576
# 如需环境变量,建议单独放文件,便于变更管理
EnvironmentFile=-/etc/myapp/myapp.env
[Install]
WantedBy=multi-user.target
3)加载并启用:
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp
经验法则(少走弯路):
- 别用 rc.local 托管长期服务,一旦异常退出你很难自动拉起;systemd 的
Restart=always是稳定性的底盘。 - 强烈建议用非 root 用户运行(
User=),权限边界清晰,安全面更小。 - 需要依赖网络时,用
network-online.target,避免“开机抢跑导致启动失败”。
方式三(兼容/临时):rc.local 开机执行一次脚本(不建议承载核心服务)🧩
适用于:少量一次性初始化动作(比如写 sysctl、挂载、生成目录),不适合长期守护。
CentOS 7 常见做法:
chmod +x /etc/rc.d/rc.local
echo "/usr/local/bin/init_task.sh" >> /etc/rc.d/rc.local
说明:不同系统版本对 rc.local 的兼容程度不一;长期方案还是建议回到 systemd。
方式四(旧式但仍可用):chkconfig(主要面向 /etc/init.d 脚本)🧱
适用于:老软件只提供 init 脚本的场景(CentOS 7 常见,8/Stream 更少见)。
chkconfig --add 服务名
chkconfig 服务名 on
service 服务名 start
风险提示:这条路线可维护性一般,优先考虑把它“升级”为 systemd unit。
方式五:crontab @reboot(适合用户级任务)⏱️
适用于:某个用户登录态相关的启动任务、轻量脚本。
crontab -e
@reboot /usr/local/bin/job.sh
注意:它不等价于服务管理,失败重试、依赖关系、日志治理都偏弱。
选型对比表(你按场景直接拍板)
| 场景 | 推荐方式 | 优点 | 主要风险 |
|---|---|---|---|
| 标准软件(Nginx/Redis/ES 等) | systemctl enable | 最稳、可观测、可审计 | 服务名要选对 |
| 自研/自定义程序长期运行 | 自建 systemd unit | 支持守护、重启、依赖、资源限制 | unit 写错路径/权限会启动失败 |
| 开机只跑一次的初始化 | rc.local / systemd oneshot | 快速、简单 | 不适合承载核心服务 |
| 老式 init.d 脚本 | chkconfig | 兼容存量 | 可维护性与可观测性偏弱 |
| 用户级轻量任务 | @reboot | 简单 | 失败治理能力弱 |
一句话工作流(最稳的落地路径)✅
发现服务 → 优先 systemctl enable --now → 没有服务就自建 unit → 用 journalctl -u -b 做启动可观测 → 生产环境禁用“临时拼凑式自启”。
如果你把“软件名/启动命令/安装方式(yum、rpm、二进制、Docker)”发我,我可以直接给你一份对应该软件的最小可用 unit 文件,同时把日志、重启策略、文件句柄等生产级参数一次配置到位。
已经是第一篇啦!
下一篇: 服务器路由命令有哪些常用技巧?