linux_系统开机自动执行shell脚本
创建systemd服务单元systemd通过“服务单元文件”管理所有开机任务。我们要创建一个专门负责调用rc.local的服务。1.1 新建服务定义文件sudo vim /etc/systemd/system/rc-local.service将以下内容复制进去[Unit] Description/etc/rc.local Compatibility ConditionPathExists/etc/rc.local [Service] Typeforking ExecStart/etc/rc.local start TimeoutSec0 StandardOutputtty RemainAfterExityes SysVStartPriority99 [Install] WantedBymulti-user.target这段配置的意思是Description给服务起个名字方便识别ConditionPathExists只有当/etc/rc.local文件真实存在时才启用这个服务Typeforking告诉systemd这个脚本会自己“分叉”成后台进程兼容传统rc.local行为ExecStart真正要执行的命令即运行/etc/rc.local startRemainAfterExityes即使脚本执行完退出了systemd也认为服务仍在运行——这是关键否则systemd会误判为失败。1.2 编写并配置rc.local脚本我将一个挂载命令写在了里面#!/bin/sh -e echo Linux系统开机自启脚本已成功运行于 $(date) /usr/local/startup.log mount -t nfs 192.168.0.99:/home/share/mnt_data /mnt/99_share exit 0第一行#!/bin/sh -e强制使用POSIX shell并在遇到错误时立即退出echo行记录一条带时间戳的日志用于后续验证exit 0必须有表示脚本执行成功。缺了它systemd会认为启动失败。1.3 赋予执行权限sudo chmod x /etc/rc.local1.4 启用rc-local服务# 在systemd启动时自动将rc-local.service加入multi-user.target的依赖链。相当于给服务挂了个“开机闹钟” sudo systemctl enable rc-local # 立即启动服务 sudo systemctl start rc-local.service # 检查服务状态 sudo systemctl status rc-local.service1.5 验证效果在电脑开机之后查看是否生成了日志文件cat /usr/local/startup.log成功这证明整个链路——systemd → rc-local.service → /etc/rc.local → echo命令——全部打通。参考博客新手必看如何让Linux系统开机自动执行Shell脚本-CSDN博客