测试脚本自启全流程详解,小白也能一次成功
1. 开机自启动到底有什么用?
你有没有遇到过这种情况:每次重启电脑后,都要手动运行一堆程序或脚本?比如监控服务、数据采集脚本、后台守护进程……重复操作不仅麻烦,还容易忘记。
这时候,“开机自启动”就派上大用场了。只要设置一次,系统一开机,你的脚本就会自动跑起来,完全不用操心。
今天这篇文章,就是手把手带你完成Ubuntu系统下开机自启动脚本的完整配置流程。哪怕你是Linux新手,也能照着步骤一步步操作,一次成功!
我们不讲复杂理论,只说你能看懂的话,用最通用、最稳定的方法——systemd服务方式来实现。
2. 为什么推荐用 systemd 来做开机启动?
在Linux里,其实有好几种方法可以实现开机自启,比如:
- 修改
/etc/rc.local - 使用 crontab 的
@reboot - 写桌面环境的启动项
- 配置 systemd 服务(本文方法)
但前面几种要么兼容性差,要么只适用于特定版本或场景。而systemd 是现代Linux发行版的标准初始化系统,Ubuntu从15.04开始全面采用它,稳定性高、控制灵活、支持依赖管理。
所以,如果你想写一个长期有效、跨版本通用、可管理性强的开机启动方案,systemd 是首选。
3. 核心原理一句话说清楚
我们要做的,其实就是创建一个自定义的服务文件(.service),告诉系统:“每次开机时,请帮我运行这个脚本。”
这个服务会被 systemd 管理,你可以像管理nginx、mysql那样,用systemctl start、stop、status来控制它。
4. 准备工作:你需要知道的几个关键点
4.1 所有路径必须使用绝对路径
这是新手最容易出错的地方!
无论是脚本位置、日志文件、还是执行命令,都不能用相对路径(如./test.sh或~/Desktop),必须写完整的绝对路径,例如:
/home/ubuntu/Desktop/test.sh否则服务启动时会找不到文件,导致失败。
4.2 脚本要有可执行权限
确保你的脚本是可以直接运行的。如果没权限,加个执行权限:
chmod +x /home/ubuntu/Desktop/test.sh4.3 使用 root 权限操作服务文件
systemd 的服务配置文件需要放在/etc/systemd/system/目录下,这个目录只有 root 用户能写入,所以后续操作建议用sudo或切换到 root 用户。
5. 第一步:编写你要自动运行的测试脚本
我们先写一个简单的测试脚本,验证是否真的能自启成功。
假设脚本放在桌面,名字叫test.sh,功能是往日志文件里写一句话。
5.1 创建 test.sh 脚本
打开终端,输入以下命令创建脚本:
nano /home/ubuntu/Desktop/test.sh粘贴以下内容:
#!/bin/bash echo "【$(date '+%Y-%m-%d %H:%M:%S')】这是一个开机自启动的测试程序。" >> /home/ubuntu/Desktop/test.log保存并退出(Ctrl+O → Enter → Ctrl+X)。
5.2 给脚本添加执行权限
chmod +x /home/ubuntu/Desktop/test.sh现在你可以手动运行试试看:
/home/ubuntu/Desktop/test.sh然后检查桌面是否生成了test.log,内容是不是带时间戳的那句话。
如果能看到日志,说明脚本没问题,继续下一步。
6. 第二步:创建 systemd 服务文件 AutoRun.service
这才是真正的“魔法开关”。
我们要创建一个名为AutoRun.service的配置文件,告诉系统怎么运行我们的脚本。
6.1 创建服务文件
运行命令:
sudo nano /etc/systemd/system/AutoRun.service注意:这里直接写到了目标目录,省去复制步骤,更稳妥。
粘贴以下内容:
[Unit] Description=AutoRun-Service After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/Desktop ExecStart=/home/ubuntu/Desktop/test.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target6.2 参数解释(小白也能懂)
| 配置项 | 含义 |
|---|---|
Description | 服务描述,随便起个名字就行 |
After=network.target | 表示等网络准备好后再启动,避免脚本需要联网却失败 |
User=ubuntu | 指定以哪个用户身份运行脚本(请改成你自己的用户名) |
WorkingDirectory | 脚本所在目录,作为工作路径 |
ExecStart | 实际要执行的命令,必须是绝对路径 |
Restart=on-failure | 如果脚本崩溃或异常退出,自动重启 |
RestartSec=10 | 重启前等待10秒 |
WantedBy=multi-user.target | 表示在多用户模式下启用(即正常开机状态) |
特别提醒:
- 把
User=ubuntu改成你自己登录系统的用户名(可用whoami查看) - 所有路径替换成你实际的路径(可以用
pwd查当前路径)
7. 第三步:启用并测试服务
服务文件写好了,接下来让它生效。
7.1 重新加载 systemd 配置
sudo systemctl daemon-reload这一步很重要,让系统重新读取所有服务配置。
7.2 设置开机自启
sudo systemctl enable AutoRun.service你会看到提示:
Created symlink /etc/systemd/system/multi-user.target.wants/AutoRun.service → /etc/systemd/system/AutoRun.service.这意味着:开机时将自动启动这个服务。
7.3 现在就启动一次(不用重启)
我们可以先手动启动,看看有没有问题:
sudo systemctl start AutoRun.service查看服务状态:
sudo systemctl status AutoRun.service如果看到类似这样的输出:
● AutoRun.service - AutoRun-Service Loaded: loaded (/etc/systemd/system/AutoRun.service; enabled) Active: active (running) since Mon 2025-04-05 14:20:12 CST; 5s ago并且没有报错信息,说明服务已经成功运行!
再去桌面看看test.log,是不是又多了一条带时间的日志?
8. 常见问题排查指南
即使严格按照步骤来,也可能遇到问题。别慌,下面是最常见的几种情况和解决办法。
8.1 日志文件没生成?可能是路径错了
检查:
test.sh和test.log的路径是不是写对了?- 用户名是不是写成了
ubuntu,但你其实是zhangsan?
建议:把所有路径打印出来确认一下:
echo /home/ubuntu/Desktop/test.sh ls -l /home/ubuntu/Desktop/test.sh8.2 提示 “Failed to start AutoRun.service”?
运行:
sudo journalctl -u AutoRun.service --since "5 minutes ago"这条命令会显示该服务最近的日志,帮你定位错误原因。
常见错误包括:
- 脚本没有执行权限
- 路径不存在
- bash 解释器路径不对(有些系统
/bin/bash不存在,可用/usr/bin/env bash替代)
8.3 如何临时关闭服务?
如果你想调试或者停用:
sudo systemctl stop AutoRun.service # 立即停止 sudo systemctl disable AutoRun.service # 取消开机启动想恢复?再enable一次就行。
9. 进阶技巧:让脚本更实用
你现在已经有了基础能力,接下来可以升级玩法。
9.1 让脚本接收参数(start/stop/status)
修改test.sh,让它支持不同命令:
#!/bin/bash LOGFILE="/home/ubuntu/Desktop/test.log" case "$1" in start) echo "【$(date '+%Y-%m-%d %H:%M:%S')】服务已启动。" >> $LOGFILE ;; stop) echo "【$(date '+%Y-%m-%d %H:%M:%S')】服务已停止。" >> $LOGFILE ;; status) echo "【$(date '+%Y-%m-%d %H:%M:%S')】正在运行..." >> $LOGFILE ;; *) echo "Usage: $0 {start|stop|status}" exit 1 ;; esac exit 0然后在.service文件中这样调用:
ExecStart=/home/ubuntu/Desktop/test.sh start ExecStop=/home/ubuntu/Desktop/test.sh stop这样就能实现标准的启停逻辑了。
9.2 添加环境变量(比如Python脚本需要虚拟环境)
有时候你的脚本依赖特定环境,比如Python虚拟环境,可以在服务中加:
Environment="PATH=/home/ubuntu/myenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"10. 总结:你已经掌握了一项实用技能
1. 本文核心要点回顾
我们一步一步完成了整个开机自启动的配置流程:
- 写了一个测试脚本
test.sh - 创建了 systemd 服务文件
AutoRun.service - 将服务注册进系统,并设置为开机启动
- 验证了服务能否正常运行
- 学会了如何查看日志和排查问题
这套方法适用于几乎所有类型的脚本:Shell、Python、Node.js、Java 等,只要你能把它们封装成一个可执行命令。
2. 下一步你可以尝试
- 把定时备份数据库的脚本设为开机自启
- 自动启动一个Web服务器或API服务
- 让树莓派开机自动采集传感器数据
- 结合休眠唤醒机制,实现全天候监控
只要你想让某个任务“开机就自动跑”,都可以用这套方法搞定。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。