Linux 如何设置开机自启:全面指南!

在日常运维和开发中,我们经常希望某些程序或服务在系统启动时自动运行,比如 Web 服务、数据库、监控脚本、定时任务等。本文将详细介绍在 Linux 系统中设置开机自启的常见方法,适用于常见发行版如 CentOS、Ubuntu、Debian 等。
一、使用 systemd 管理服务(推荐)

大多数现代 Linux 发行版(如 CentOS 7+/Ubuntu 16.04+)使用 systemd 作为初始化系统。

  1. 创建 systemd 服务文件

    sudo nano /etc/systemd/system/myapp.service

写入如下内容(根据实际情况修改):

复制代码
[Unit]Description=My Application ServiceAfter=network.target[Service]Type=simpleExecStart=/usr/bin/python3 /opt/myapp/app.pyRestart=on-failureUser=root[Install]WantedBy=multi-user.target
  1. 重新加载 systemd 配置​​​​​​​

    sudo systemctl daemon-reexecsudo systemctl daemon-reload

  2. 设置开机启动

    sudo systemctl enable myapp.service

  3. 启动服务并检查状态​​​​​​​

    sudo systemctl start myapp.servicesudo systemctl status myapp.service

二、使用 rc.local 实现自启(传统方式)

适用于旧版本 Linux 或需要简单实现时使用。

  1. 编辑 rc.local 文件

某些系统默认该文件不存在或未设置执行权限。

复制代码
sudo nano /etc/rc.local

添加你希望开机执行的命令,比如:​​​​​​​

复制代码
#!/bin/bashpython3 /opt/myapp/app.py &exit 0
  1. 添加执行权限

    sudo chmod +x /etc/rc.local

  2. 启用 rc.local(如果 systemd 系统中未启用)

对于 Ubuntu 20+,可以启用 rc-local.service:​​​​​​​

复制代码
sudo systemctl enable rc-localsudo systemctl start rc-local

三、使用 crontab @reboot 设置自启(简洁快速)

cron 提供 @reboot 参数来在系统启动后运行任务。

  1. 编辑当前用户的 crontab

    crontab -e

添加以下内容:

复制代码
@reboot /usr/bin/python3 /opt/myapp/app.py
  1. 检查是否添加成功

    crontab -l

✅ 注意事项:

路径必须为绝对路径。

如果脚本依赖网络或数据库,可能需要 sleep 10 等等待逻辑。

输出建议重定向到日志文件,避免无法调试:

复制代码
@reboot /usr/bin/python3 /opt/myapp/app.py >> /var/log/myapp.log 2>&1

四、使用桌面环境的"启动应用程序"(适用于图形界面)

如果你使用的是带 GUI 的系统,如 Ubuntu Desktop:

  • 打开"启动应用程序"(Startup Applications)。

  • 点击"添加"。

  • 输入名称、命令和说明。

  • 保存并重启验证。

五、总结对比

|-----------------|------------|-------------|----------|
| 方法 | 适用范围 | 优点 | 缺点 |
| systemd | 推荐方式 | 稳定、可管理、日志完善 | 配置复杂一些 |
| rc.local | 老系统、简单任务 | 快速直接 | 兼容性差,已弃用 |
| crontab @reboot | 任意任务、自定义脚本 | 简洁灵活 | 无日志、管理不便 |
| GUI启动项 | 桌面用户 | 直观 | 无法用于服务程序 |

六、附录:查看已设置的开机启动项

查看 systemd 启动项

查看当前正在运行的服务

复制代码
systemctl list-units --type=service

查看 crontab 的启动项

复制代码
crontab -l

结语

不同场景下设置开机自启的方法各有优劣,如果是做服务运维或开发部署,推荐使用 systemd 管理自启;如果只是简单脚本或测试,crontab @reboot 会更加快捷。

相关推荐
skywalk816310 分钟前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒12 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面14 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816316 分钟前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
zl_dfq16 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23316 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
袁煦丞 cpolar内网穿透实验室20 分钟前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
AZ996ZA30 分钟前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
_OP_CHEN36 分钟前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Web极客码38 分钟前
WordPress博客关键词
服务器·wordpress·网站加速