ubuntu开机启动rc.local无效

我的ss突然生效了,想起来昨天linode发过邮件,说是机器会重启,记得配置时候有处理过开机启动的问题,但还是觉得会是此问题,今天来重新启动下ss就好了,那么如何搞定开机启动的问题呢?为什么在rc.local中添加的命令未能执行?

 

搜索中知道rc.local不生效的原因可能是:1.跟runlevel有关,但查看之后发现没问题;2.跟dash有关,ubuntu现在默认shell执行/bin/sh指向dash,改为bash依旧无效。

 

同时知道执行rc.local实际是在 /etc/init.d/rc.local 中,检查是否存在 /etc/rc.local,如果有,则执行其内命令。仔细查看此文件,在开头存在一句PATH=/sbin:/usr/sbin:/bin:/usr/bin,我试过直接执行/etc/rc.local是没有问题的,那么会不会是和特定的环境变量有关?然后which查看需要处理的命令,位于/usr/local/bin,好吧,问题找到了,在命令之前增加相应的环境变量,问题解决。

 

2021.02.03 更新:

评论区答疑:
Q: 环境变量如何添加?
A: 昨晚补了一篇博客《Ubuntu 环境变量设置》,但是此处可以通过修改 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin 来解决,当然需要先通过 which 命令查询命令所在目录

-- PATH=/sbin:/usr/sbin:/bin:/usr/bin
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin

 

<think> 首先,用户的问题是:“Ubuntu启动时出现 'failed to isolate default execution' 错误的解决方案”。我需要基于提供的引用和之前的系统指令来回答。 回顾系统指令: - 所有行内数学表达式使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾自然地添加引用标识,例如 [^1]。 提供的引用: - [^1]: 关于在Linux上手动安装组件,没有自动化工具。 - [^2]: 示例如何在Ubuntu上设置开机自动运行程序,涉及 systemd 和 rc.local。 - [^3]: 解决Docker命令中的路径问题。 - [^4]: 运行某个映射工具的示例命令。 用户的错误是“failed to isolate default execution”,这听起来像是 systemd 相关的错误。因为 systemd 是 Ubuntu 的初始化系统,负责启动服务和管理进程。 从引用 [^2] 中,提到了 systemd service 文件rc.local.service),这可能与系统启动相关。错误消息“failed to isolate default execution”可能与 systemd 的单元隔离或执行失败有关。 常见原因: - Systemd 配置文件错误。 - 服务依赖问题。 - 权限问题。 - 系统资源限制。 在引用 [^2] 中,显示了 rc.local.service 的配置,这可能是一个线索。错误可能发生在启动过程中尝试执行某个服务时。 可能的解决方案: 1. **检查 systemd 单元文件**: 确保相关服务文件(如 rc.local 或其他服务)配置正确。 2. **查看日志**: 使用 `journalctl` 命令查看启动日志。 3. **权限问题**: 确保脚本有执行权限。 4. **依赖问题**: 检查服务单元的依赖关系。 用户引用中提到 rc.local 的设置,所以错误可能与自定义启动脚本相关。 结构化回答: - 解释错误。 - 提供步骤解决。 - 基于引用 [^2] 添加引用标识。 - 使用中文。 - 结尾生成相关问题。 由于引用 [^2] 是关于设置 rc.local 的,我应该将其融入回答中。 回答大纲: 1. **介绍错误**: 指出错误可能与 systemd 相关,涉及服务启动。 2. **步骤解决**: - 检查 systemd 日志。 - 审查服务单元文件。 - 确保脚本权限正确。 - 引用 [^2] 的例子说明如何设置 rc.local。 3. **生成相关问题**。 确保使用正确的格式: - 行内变量如路径使用 `$PATH` 格式。 - 命令示例使用代码块。 - 独立公式不需要,因为没有数学。 最终回答: - 用中文。 - 清晰、逐步。 - 添加引用。 </think> ### Ubuntu启动时出现“failed to isolate default execution”错误的解决方案 “failed to isolate default execution”错误通常与 Ubuntu 的 systemd 初始化系统相关,表示在系统启动过程中无法隔离或执行默认的服务单元(unit),可能由配置错误、权限问题或依赖冲突引起。以下是基于系统调试经验的逐步解决方案。整个过程需要 root 权限(使用 `sudo` 命令),请确保在终端中操作。 #### 1. **查看详细日志以定位错误根源** - 使用 `journalctl` 查询 systemd 启动日志,过滤错误关键字: ```bash sudo journalctl -b -p err | grep "failed to isolate default execution" ``` - `-b` 表示本次启动日志,`-p err` 过滤错误级别消息。 - 日志输出会显示具体失败的服务名(如 `.service` 文件),帮助精准定位问题。例如,日志可能指向 `rc-local.service` 或自定义单元[^2]。 #### 2. **检查相关服务单元文件** - 错误常由服务单元配置不当引起,如依赖缺失或路径错误: - 找出日志中提到的服务名称(假设为 `example.service`),查看其配置文件: ```bash sudo systemctl cat example.service ``` - 检查关键字段: - `After` 确保依赖服务(如 `network.target`)已正确声明。 - `ExecStart` 确保脚本路径正确且可执行。 - 参考引用 [^2] 中的示例,`rc.local.service` 依赖于 `network.target` 并定义执行路径 `/etc/rc.local`。如果您的错误涉及类似服务,确认 `ConditionFileIsExecutable` 和 `ExecStart` 路径无误[^2]。 #### 3. **验证脚本权限和内容** - 如果错误关联自定义脚本(如 `/etc/rc.local`),确保: - 脚本有可执行权限: ```bash sudo chmod +x /etc/rc.local # 示例路径,根据实际情况替换 ``` - 脚本内容无语法错误:使用文本编辑器(如 `vim`)检查。 ```bash sudo vim /etc/rc.local ``` - 在脚本开头添加 shebang(如 `#!/bin/bash`),避免执行失败。引用 [^2] 显示,缺少 shebang 可能引发类似问题[^2]。 #### 4. **重新加载 systemd 并测试服务** - 修改配置后,重新加载 systemd: ```bash sudo systemctl daemon-reload sudo systemctl restart example.service # 替换为实际服务名 ``` - 测试服务是否正常启动: ```bash sudo systemctl status example.service ``` - 如果状态显示“active (running)”,则问题解决;否则,根据错误消息调整配置。 #### 5. **处理依赖或资源限制问题** - 如果日志显示资源不足(如内存或进程隔离失败),检查系统限制: ```bash systemd-run --unit=test-unit --slice=user.slice sleep 10 ``` - 此命令测试默认执行隔离是否成功。如果失败,可能需要调整 systemd 全局设置(编辑 `/etc/systemd/system.conf`),例如增加 `DefaultMemoryLimit`。 - 确保所有依赖服务已启用: ```bash sudo systemctl enable network.target # 示例常见依赖 ``` #### 注意事项 - **备份配置文件**:在进行任何修改前,备份相关文件(如 `cp /etc/systemd/system/example.service ~/backup`),避免误操作导致启动失败。 - **错误常见场景**:此错误多发生在自定义开机脚本(如 rc.local)或容器化环境(引用 [^3] 中 Docker 命令的路径问题类似),确保路径和环境变量正确[^3]。 - 如果上述步骤无效,尝试启动到恢复模式(GRUB 菜单选择“Advanced options”),修复损坏的包: ```bash sudo apt install --reinstall systemd ``` 通过以上步骤,大多数“failed to isolate default execution”错误可以解决。关键是通过日志定位源头,并验证服务单元的配置和权限[^2]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值