Ubuntu系统通过rc.local实现服务开机自启动、自动执行.sh脚本

一、实现原理

       需要说明,rc.local 是一个配置文件,开机启动时,会加载这个配置文件,于是我们写在里面的内容会被当做命令逐一执行。这个方法显然比自己定义一个服务要简单快捷,可以用于实现一些简单服务自启动。

二、linux系统启动流程图:

三、示例

小结:

用rc.local实现开机自启动:

1、新建.sh脚本,将需要开机自启的服务命令写入脚本中,如hello.sh
2、给予脚本可执行权限 sudo chmod a+x hello.sh
3、将脚本的绝对路径添加到 /etc/rc.local 中
4、如上,即可实现开机自启动

示例:
//hello.sh
//nvidia@nvidia-master:~$ cat /usr/local/scripts/hello.sh
#! /bin/bash

/etc/init.d/ssh start
/etc/init.d/gpsd start
/etc/init.d/chrony start

ifconfig eth1 mtu 1500
ifconfig eth10 mtu 1500

echo "hello auto excute example when open machine.  --add by xw" > $(pwd)/hello.log

//rc.local
//nvidia@nvidia-master:~$ cat /etc/rc.local
#!/bin/bash
mount UUID="4d589066-8172-4e79-b440-52cf9824831f"   /home/nvidia/data

#ifconfig  eth10 mtu 1500

/usr/local/scripts/hello.sh

截图:

 

参考:

用rc.local实现开机自启动_lumaoxing的博客-CSDN博客

Systemd 添加自定义服务(开机自启动) - 江湖小小白 - 博客园

Systemd/zh-cn - Fedora Project Wiki

https://blog.csdn.net/xuw_xy/article/details/121463292

<think>好的,我现在需要解决用户关于如何通过rc.localLinux中配置根文件系统开机自启动的问题。首先,我需要回顾一下rc.local的基本知识以及它在现代Linux系统中的使用情况。 用户提到的是rc.local,这在传统的SysV init系统中是常见的脚本,位于/etc/rc.local。但现在的许多Linux发行版已经转向使用systemd,所以可能需要确认rc.local是否仍然有效。根据引用中的资料,比如引用[1]和引用[2],即使在使用systemd的系统上,仍然可以通过创建rc-local.service服务rc.local。因此,我需要确保用户知道如何检查他们的系统是否支持rc.local,并且如何用它。 接下来,用户特别提到了根文件系统开机自启动配置。根文件系统通常是挂载在/目录下的,但可能存在某些情况下需要在动时执行特定的操作,比如挂载其他文件系统、配置网络或者服务。需要注意的是,rc.local是在系统动的最后阶段执行的,所以适合执行那些需要在其他服务动之后运行的命令。 根据引用[3],需要确保rc.local文件以及其中的脚本具有可执行权限。比如,用户可能需要执行chmod +x /etc/rc.local,以及确保脚本本身的权限正确。此外,如果根文件系统的配置涉及到网络设置,可能需要参考引用[2]中的DHCP配置方法,或者像引用[4]提到的延迟执行命令,比如使用sleep来等待网络就绪。 然后,我需要整理出具体的步骤。首先,检查系统是否支持rc.local,如果没有则创建相应的systemd服务。接着,编辑rc.local文件,添加所需的命令,比如挂载命令或者脚本。然后设置权限,并测试是否生效。此外,可能需要注意依赖关系,比如在挂载文件系统前确保设备已经就绪,可能需要使用systemd的依赖管理或者在rc.local中添加适当的等待逻辑。 另外,用户的问题是关于根文件系统的配置,可能需要考虑在rc.local执行的命令是否需要在根文件系统挂载后运行。比如,如果用户需要在动时挂载另一个文件系统到根文件系统的某个目录下,或者修改根文件系统的某些配置,这需要在正确的时间点执行。如果命令执行过早,可能会导致失败,所以可能需要延迟执行,如引用[4]中使用sleep命令。 最后,需要提醒用户关于使用rc.local的注意事项,比如现代系统中更推荐使用systemd服务单元,因为rc.local可能在新版本中被弃用。同时,错误处理也很重要,确保命令可以在无用户交互的情况下运行,并且记录日志以便调试。 总结步骤应该是:rc.local(如果需要)、编辑文件、设置权限、测试、处理依赖和错误。同时,提供相关问题,帮助用户进一步了解相关主题,比如systemd服务配置、文件系统挂载的配置方法等。</think>### 通过`rc.local`实现根文件系统开机的配置方法 #### 1. **确认`rc.local`可用性** - 在基于`systemd`的Linux系统(如Ubuntu 18.04+)中,默认可能未用`rc.local`。需手动创建服务文件: ```bash sudo nano /etc/systemd/system/rc-local.service ``` 添加以下内容[^1][^2]: ```ini [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target ``` #### 2. **编辑`/etc/rc.local`文件** - 创建或修改`/etc/rc.local`: ```bash sudo nano /etc/rc.local ``` - 添加需要开机执行的命令(以挂载根文件系统为例): ```bash #!/bin/bash # 示例:挂载额外的文件系统到根目录下 mount /dev/sda1 /mnt/custom_root # 延迟执行(如依赖网络或其他服务) (sleep 30 && /path/to/your_script.sh) & exit 0 ``` 注意:`mount`操作需确保设备已就绪,可结合`sleep`或依赖检查[^4]。 #### 3. **设置文件权限** - 赋予`rc.local`可执行权限: ```bash sudo chmod +x /etc/rc.local ``` - 若`/etc/rc.d/rc.local`存在,也需设置权限: ```bash sudo chmod +x /etc/rc.d/rc.local # 参考[^3] ``` #### 4. **用并测试服务** - 服务: ```bash sudo systemctl enable rc-local sudo systemctl start rc-local ``` - 检查状态: ```bash sudo systemctl status rc-local ``` #### 5. **注意事项** - **依赖顺序**:若命令依赖其他服务(如网络),需在`rc.local`中添加延迟逻辑(如`sleep 30`)[^4]。 - **日志调试**:在脚本中添加日志输出,例如: ```bash echo "$(date): Mount completed" >> /var/log/rc-local.log ``` - **替代方案**:建议优先使用`systemd`服务单元,通过`/etc/systemd/system/`定义更精准的依赖和控制[^1]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xw-何妨吟啸且徐行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值