一、前置准备:清理旧配置(避免冲突)
先移除之前通过update-rc.d/systemd 设置的无效自启配置,确保仅保留rc.local的自启逻辑:
1. 移除 SysVinit 风格的自启软链接
sudo gedit /etc/rc.local
-
写入完整自启脚本(复刻手动启动逻辑)
#!/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>&1exit 0
-
添加执行权限(必须)
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
-
写入完整生效配置
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 -
重新加载配置并永久启用
重新加载systemd配置
sudo systemctl daemon-reload
先取消临时启用,再永久启用
sudo systemctl disable rc-local
sudo systemctl enable rc-local验证启用状态(输出enabled=永久生效)
sudo systemctl is-enabled rc-local
-
重启 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