Linux系统开机自启动脚本配置详解

在Linux系统中,有时我们需要在系统启动时自动执行一些脚本或命令,比如启动特定的服务、挂载存储设备、设置系统参数等。本文将详细介绍如何在现代Linux系统(如Arch、CentOS 7、Ubuntu 24.04等)中配置开机自启动脚本。

实现原理

我们将通过创建systemd服务单元来实现开机自启动。这种方式比传统的/etc/rc.d/rc.local方式更加规范和可靠,具有以下优点:

  • 支持依赖管理
  • 可以方便地控制启动顺序
  • 提供更好的日志记录和错误处理
  • 支持服务状态监控

具体步骤

1. 创建systemd服务单元文件

首先,创建一个systemd服务单元文件:

1
sudo nvim /usr/lib/systemd/system/rclocal.service

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=/etc/rc.local Compatibility

[Service]
Type=forking
ExecStart=/etc/rc.local start
# ExecStart=/usr/bin/su -c '/etc/user.local start' 用户名 # 若要使用特定用户运行脚本
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

配置说明:

  • Type=forking:表示服务进程将会创建子进程,父进程退出后服务继续运行
  • ExecStart:指定要执行的脚本
  • RemainAfterExit=yes:表示即使服务进程退出,服务也被视为活动状态
  • SysVStartPriority=99:设置启动优先级

2. 创建启动脚本文件

创建/etc/rc.local文件:

1
sudo nvim /etc/rc.local

写入以下内容:

1
2
3
4
5
6
7
8
#!/bin/sh
# /etc/rc.local
if test -d /etc/rc.local.d; then
for rcscript in /etc/rc.local.d/*.sh; do
test -r "${rcscript}" && sh ${rcscript}
done
unset rcscript
fi

这个脚本会遍历/etc/rc.local.d目录下的所有.sh脚本并执行它们。

3. 设置执行权限

1
sudo chmod a+x /etc/rc.local

4. 创建脚本目录

1
sudo mkdir /etc/rc.local.d

5. 启动服务并设置开机自启

1
2
sudo systemctl start rclocal
sudo systemctl enable rclocal

使用方法

要添加开机自启动脚本,只需要在/etc/rc.local.d目录下创建以.sh结尾的脚本文件即可。例如:

1
2
3
4
5
# 创建一个示例脚本
sudo vim /etc/rc.local.d/example.sh

# 添加执行权限
sudo chmod +x /etc/rc.local.d/example.sh

注意事项

  1. 确保脚本具有可执行权限
  2. 脚本中最好使用绝对路径
  3. 添加适当的错误处理和日志记录

常见问题

  1. 服务无法启动

    • 检查脚本权限
    • 查看系统日志:journalctl -xe
    • 确认脚本路径正确
  2. 脚本执行顺序

    • 脚本按照文件名字母顺序执行
    • 可以通过文件名前缀(如01_02_等)控制执行顺序
  3. 调试建议

    • 在脚本中添加日志输出
    • 使用systemctl status rclocal查看服务状态
    • 测试时可以手动执行脚本验证