Ubuntu 22.04 下 IGH EtherCAT 主站永久性开机自启

一、前置准备:清理旧配置(避免冲突)

先移除之前通过update-rc.d/systemd 设置的无效自启配置,确保仅保留rc.local的自启逻辑:

1. 移除 SysVinit 风格的自启软链接

复制代码
sudo gedit /etc/rc.local
  1. 写入完整自启脚本(复刻手动启动逻辑)

    #!/bin/bash

    延迟20秒:确保开机后内核、网卡、网络全就绪(可根据机器调整)

    sleep 20

    核心操作:启动EtherCAT主站(与手动执行的命令一致)

    /etc/init.d/ethercat start

    兜底:验证/dev/EtherCAT0是否创建,未创建则手动补(极端情况防护)

    if [ ! -c /dev/EtherCAT0 ]; then
    # IGH EtherCAT主站设备号固定:主240,次0
    sudo mknod /dev/EtherCAT0 c 240 0
    sudo chmod 666 /dev/EtherCAT0
    fi

    记录开机日志(方便排查问题)

    echo "EtherCAT boot success - $(date)" >> /var/log/ethercat_boot.log
    lsmod | grep ec_ >> /var/log/ethercat_boot.log
    ls /dev/EtherCAT0 >> /var/log/ethercat_boot.log 2>&1

    exit 0

  2. 添加执行权限(必须)

    sudo chmod +x /etc/rc.local

    验证权限(输出含x=成功)

    ls -l /etc/rc.local

三、核心步骤 2:修复 rc-local.service(实现永久启用)

补充[Install]段,解决 Ubuntu 22.04 默认rc-local.service"临时启用(enabled-runtime)" 的问题:

1. 备份并编辑rc-local.service配置

复制代码
# 备份原配置(防止出错)
sudo cp /lib/systemd/system/rc-local.service /lib/systemd/system/rc-local.service.bak

# 编辑配置文件
sudo nano /lib/systemd/system/rc-local.service
  1. 写入完整生效配置

    SPDX-License-Identifier: LGPL-2.1-or-later

    This file is part of systemd.

    systemd is free software; you can redistribute it and/or modify it

    under the terms of the GNU Lesser General Public License as published by

    the Free Software Foundation; either version 2.1 of the License, or

    (at your option) any later version.

    This unit gets pulled automatically into multi-user.target by

    systemd-rc-local-generator if /etc/rc.local is executable.

    [Unit]
    Description=/etc/rc.local Compatibility
    Documentation=man:systemd-rc-local-generator(8)
    ConditionFileIsExecutable=/etc/rc.local
    After=network.target

    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    RemainAfterExit=yes
    GuessMainPID=no

    [Install]
    WantedBy=multi-user.target

  2. 重新加载配置并永久启用

    重新加载systemd配置

    sudo systemctl daemon-reload

    先取消临时启用,再永久启用

    sudo systemctl disable rc-local
    sudo systemctl enable rc-local

    验证启用状态(输出enabled=永久生效)

    sudo systemctl is-enabled rc-local

  3. 重启 rc-local 服务(使配置生效)

    sudo systemctl restart rc-local

    验证服务状态(输出active=成功)

    sudo systemctl status rc-local

验证永久性启用

复制代码
# 1. 检查rc-local启用状态(永久enabled)
sudo systemctl is-enabled rc-local

# 2. 检查开机日志(确认自启执行)
cat /var/log/ethercat_boot.log
相关推荐
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
Sinclair2 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
Rockbean3 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
茶杯梦轩3 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
崔小汤呀4 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端