西双版纳傣族自治州网站建设_网站建设公司_Photoshop_seo优化
2026/1/22 5:27:02 网站建设 项目流程

适合新手的开机启动方案,无需深入systemd

对于刚接触 Linux 系统管理的新手来说,设置一个脚本在开机时自动运行听起来像是必须掌握systemd或编写复杂服务文件的任务。但其实,在大多数常见的 Ubuntu 和 Debian 系列发行版中,有一种更简单、直观且不需要理解底层服务机制的方法——利用系统自带的启动执行入口,比如rc.local

本文将带你一步步完成一个无需了解 systemd 原理的开机启动方案,使用一个简单的 Shell 脚本作为示例,确保你在不深入系统细节的前提下,也能让自定义任务随系统启动自动运行。整个过程清晰明了,适合所有刚入门 Linux 的用户。


1. 创建你的启动脚本

首先,我们需要准备一个 Shell 脚本,它将在每次开机时被执行。你可以把它放在任意位置,但为了便于管理,建议放在一个固定的目录下,例如~/Documents/scripts/

1.1 创建脚本目录和文件

打开终端,输入以下命令创建目录并进入:

mkdir -p ~/Documents/scripts cd ~/Documents/scripts

然后创建脚本文件:

nano auto_run_test.sh

1.2 编写脚本内容

在编辑器中输入如下内容:

#!/bin/bash echo "helloStartup" > ./output.txt cd /home/user/mywbc_v5_usb/build echo "EnterBuildDir" > ./output.txt ./sim/sim echo "AfterSim" > ./outputend.txt
说明:
  • #!/bin/bash:这是脚本的“声明行”,告诉系统用 Bash 解释器来执行这个文件。
  • 后续命令是你希望开机后自动执行的操作。上面的例子包括写入日志、切换目录、运行模拟程序等。
  • 注意路径要根据你实际的用户名和项目路径进行修改,尤其是/home/user/...这部分。

保存并退出(在 nano 中按Ctrl+O回车保存,Ctrl+X退出)。


2. 给脚本添加执行权限

Linux 默认不会执行没有权限的脚本。所以我们需要给它加上可执行权限。

运行以下命令:

chmod +x auto_run_test.sh

提示:虽然有些教程使用chmod 777来赋予全部权限,但这存在安全风险。普通情况下只需+x(即chmod 755)就足够了。

验证是否成功:

ls -l auto_run_test.sh

你应该能看到类似-rwxr-xr-x的权限标识,表示已可执行。


3. 使用 rc.local 实现开机启动

Ubuntu 等基于 SysVinit 遗留机制的系统提供了一个名为rc.local的传统启动脚本,它会在系统初始化完成后最后执行一次。我们可以通过修改它来加入我们的自定义脚本调用。

3.1 检查 rc.local 是否存在

先确认/etc/rc.local文件是否存在:

ls /etc/rc.local

如果提示“No such file or directory”,说明该文件未创建,需手动建立(见第5节备选方案)。如果存在,则继续下一步。

3.2 修改 rc.local 文件权限

默认情况下,/etc/rc.local可能是只读的,我们需要临时赋予写权限:

sudo chmod +w /etc/rc.local

这比chmod 777更安全,仅添加写权限而不改变其他设置。

3.3 编辑 rc.local 内容

使用文本编辑器打开:

sudo nano /etc/rc.local

确保文件以#!/bin/sh -e开头,并在exit 0之前插入以下两行:

cd /home/user/Documents/scripts sh auto_run_test.sh

完整示例如下:

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. cd /home/user/Documents/scripts sh auto_run_test.sh exit 0
关键点说明:
  • 必须确保exit 0是最后一行,否则可能导致系统启动卡住。
  • 使用sh而不是sudo sh,因为rc.local本身是以 root 权限运行的。
  • 路径中的user需替换为你的实际用户名。

保存并退出编辑器。

3.4 设置 rc.local 为可执行

为了让系统真正执行这个脚本,还需将其设为可执行:

sudo chmod +x /etc/rc.local

4. 测试与验证

现在一切就绪,我们可以重启系统来测试效果。

sudo reboot

重启完成后,检查脚本是否执行成功:

cat ~/Documents/scripts/output.txt cat ~/Documents/scripts/outputend.txt

如果你看到输出了"helloStartup""EnterBuildDir""AfterSim",那就说明脚本已经成功在开机时运行!

此外,也可以通过查看进程或日志进一步确认:

ps aux | grep sim

看是否有sim/sim程序正在运行。


5. 备选方案:当系统没有 rc.local 时怎么办?

某些新版 Ubuntu(如 20.04 及以后)默认不再包含rc.local文件。但我们仍然可以手动创建它,并启用其功能。

5.1 手动创建 rc.local 文件

sudo nano /etc/rc.local

写入以下内容:

#!/bin/sh -e # 自定义开机脚本 cd /home/user/Documents/scripts sh auto_run_test.sh exit 0

保存后设置权限:

sudo chmod +x /etc/rc.local

5.2 启用 rc-local.service

现代 Ubuntu 使用 systemd,因此需要确保有一个对应的服务单元来加载rc.local

检查是否存在rc-local.service

systemctl status rc-local

如果没有启用,可以创建或激活它。

通常情况下,标准镜像中已有该服务模板。只需启用即可:

sudo systemctl enable rc-local

然后启动服务进行测试(无需重启):

sudo systemctl start rc-local

查看状态确认是否成功:

sudo systemctl status rc-local

如果显示active (exited),说明已正常运行。


6. 替代方法:追加到 /etc/profile(适用于 GUI 登录场景)

如果你发现rc.local方法仍不可行,或者你希望脚本在用户登录后才运行(例如涉及图形界面或桌面环境的任务),可以考虑将命令追加到/etc/profile

注意:这种方法只在用户登录终端时触发,不适合后台守护任务。

编辑文件:

sudo nano /etc/profile

滚动到底部,添加:

if [ "$USER" = "user" ]; then cd /home/user/Documents/scripts sh auto_run_test.sh fi

保存退出。下次用户登录时,脚本就会自动执行。


7. 常见问题与解决建议

7.1 脚本没执行?检查这些地方

问题检查项
路径错误确保脚本中所有路径都是绝对路径或正确切换了目录
权限不足确认auto_run_test.shrc.local都有可执行权限
exit 0 缺失rc.local最后一行必须是exit 0,否则 systemd 会认为失败
用户环境缺失若脚本依赖 GUI 或 DISPLAY 变量,请改用桌面自启动

7.2 如何调试开机脚本?

可以在脚本中添加日志输出,帮助排查问题:

#!/bin/bash LOG=/tmp/startup.log echo "$(date): Starting auto_run_test.sh" >> $LOG echo "helloStartup" >> $LOG cd /home/user/mywbc_v5_usb/build && echo "Changed dir" >> $LOG || echo "Failed to change dir" >> $LOG ./sim/sim & # 后台运行避免阻塞 echo "Launched sim" >> $LOG

这样即使看不到屏幕输出,也能通过查看/tmp/startup.log判断执行情况。


8. 总结

8.1 本文要点回顾

本文介绍了一种适合新手的 Linux 开机启动方案,完全避开了复杂的systemd单元配置,核心步骤如下:

  1. 编写 Shell 脚本:明确你要执行的任务,保存为.sh文件。
  2. 赋予执行权限:使用chmod +x让系统允许运行它。
  3. 利用 rc.local:将脚本调用写入/etc/rc.local,并在exit 0前添加执行命令。
  4. 启用 rc.local 服务:对新版系统,需通过systemctl enable rc-local激活支持。
  5. 测试重启验证:通过日志或输出文件确认脚本是否成功运行。

8.2 为什么推荐这种方式?

  • 无需学习 systemd 语法:省去编写.service文件的复杂流程。
  • 兼容性强:适用于大多数 Ubuntu、Debian、CentOS 等主流发行版。
  • 易于调试:脚本独立存在,可单独测试,出错容易定位。
  • 适合自动化部署:可用于嵌入式设备、开发板、服务器初始化等场景。

8.3 下一步建议

当你熟悉了这种基础方式后,可以根据需求逐步过渡到更高级的方案,例如:

  • 使用systemd编写服务单元,实现更精细的控制(如失败重启、依赖管理)。
  • 结合日志系统(journalctl)监控脚本运行状态。
  • 将脚本打包为系统服务,提升稳定性和安全性。

但对于绝大多数日常用途和初学者项目,rc.local方案已经足够强大又足够简单。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询