rc.local文件中添加的命令不执行且rc-local.service启动失败怎么办


猕猴桃
猕猴桃 2024-10-13 18:52:25 7455
分类专栏: 问答

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=54313
赞同 0
评论 2 条
  • AI机器人 2024-10-13 19:21:01

    当你在 Linux 系统的 `/etc/rc.local` 文件中添加命令,但这些命令不执行,并且 `rc-local.service` 启动失败时,你可以按照以下步骤进行故障排查和解决:

    ### 1. 检查 `/etc/rc.local` 文件的权限和内容

    确保 `/etc/rc.local` 文件是可执行的,并且具有正确的权限。通常,这个文件应该有执行权限,并且以 root 用户身份运行。

    ```bash
    sudo chmod +x /etc/rc.local
    ```

    检查 `/etc/rc.local` 文件的内容,确保它有一个明确的 `exit 0` 语句作为最后一个命令,以确保脚本正常退出。

    ```bash
    sudo cat /etc/rc.local
    ```

    确保文件中没有语法错误,并且所有命令都适合在启动时执行。

    ### 2. 检查 systemd 的 `rc-local.service`

    在较新的 Linux 发行版中,`/etc/rc.local` 可能不再默认启用,而是使用 systemd 的 `rc-local.service` 来控制。你需要确保这个服务是启用的。

    首先,检查 `rc-local.service` 文件是否存在,并查看其内容。这个文件通常位于 `/lib/systemd/system/` 或 `/etc/systemd/system/`。

    ```bash
    sudo cat /lib/systemd/system/rc-local.service
    ```

    或者,如果你的系统中有自定义的 `rc-local.service`,请查看 `/etc/systemd/system/` 目录。

    确保 `rc-local.service` 文件中正确引用了 `/etc/rc.local`。通常,它应该看起来像这样:

    ```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
    ```

    注意:`ExecStart` 应该直接指向 `/etc/rc.local`,而不是使用 `start` 参数(除非你有特殊的包装脚本)。

    ### 3. 启用并启动 `rc-local.service`

    如果 `rc-local.service` 文件看起来没问题,尝试启用并启动服务:

    ```bash
    sudo systemctl enable rc-local.service
    sudo systemctl start rc-local.service
    ```

    然后检查服务的状态:

    ```bash
    sudo systemctl status rc-local.service
    ```

    ### 4. 查看日志

    如果服务仍然失败,查看系统日志以获取更多信息:

    ```bash
    journalctl -u rc-local.service
    ```

    或者,查看 `/var/log/syslog` 或 `/var/log/messages`(取决于你的 Linux 发行版)。

    ### 5. 确保没有其他服务冲突

    有时,其他服务可能会干扰 `rc-local.service` 的运行。确保没有其他服务或脚本正在尝试同时修改或依赖 `rc.local` 中的资源。

    ### 6. 考虑使用其他方法

    如果 `rc.local` 和 `rc-local.service` 持续引发问题,你可以考虑使用 systemd 的其他功能来运行你的启动脚本,例如创建自定义的 systemd 服务单元。

    赞同 0 反对 0
    回复

  • 哆啦漫漫喵 2024-10-14 10:46:28

    1、将/etc/rc.local的命令改成更加兼容的模式,将"#!/bin/sh"改为"#!/bin/bash" 

    2、将/bin/sh重新链接到/bin/bash,方法如下:

    方法一:终端执行 sudo dpkg-reconfigure dash,然后选择 no.

    方法二:重新进行软链接,执行以下命令:

    sudo rm /bin/sh
    sudo ln -s /bin/bash /bin/sh

    这样就将/bin/sh链接到了/bin/bash。reboot系统后,命令正常执行

    我使用的是第一个方法连接的,实测可用。

    此时,开机自启后,可以看到相应目录下的test.txt里被写入了指定内容。

    赞同 0 反对 0
    回复

    漫漫漫过海湾
猕猴桃L3
粉丝 1 发表 18 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1325
银河麒麟打印带有图像的文档时出错  1238
银河麒麟添加打印机时,出现“server-error-internal-error”  1025
统信桌面专业版【如何查询系统安装时间】  953
统信操作系统各版本介绍  946
统信桌面专业版【全盘安装UOS系统】介绍  905
麒麟系统也能完整体验微信啦!  892
统信【启动盘制作工具】使用介绍  501
统信桌面专业版【一个U盘做多个系统启动盘】的方法  443
信刻全自动档案蓝光光盘检测一体机  389
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!