news 2026/8/9 2:51:23

开机自动进入指定目录并执行程序,实操教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开机自动进入指定目录并执行程序,实操教程

开机自动进入指定目录并执行程序,实操教程

1. 为什么需要开机自动执行脚本

你有没有遇到过这样的情况:每次开机后都要手动打开终端、切换到项目目录、再运行程序?特别是做嵌入式开发、仿真测试或者部署服务时,重复操作既耗时又容易出错。比如你正在调试一个USB设备模拟器,每次都要进/home/user/mywbc_v5_usb/build目录,再执行./sim/sim——这个过程完全可以自动化。

本文要解决的就是这个问题:让系统在启动完成后,自动进入你指定的目录,并执行你想要的程序。整个过程不需要人工干预,开机即用。我们以Ubuntu系统为例,提供两种稳定可靠的方法,一种是传统rc.local方式,另一种是通用性更强的profile方案,适合不同版本的系统。

整个教程不涉及复杂配置,所有操作都基于命令行完成,每一步都有明确说明和可验证结果。即使你是Linux新手,也能照着操作顺利完成。

2. 方法一:通过rc.local实现开机自启(推荐用于Ubuntu 16.04–20.04)

2.1 创建可执行脚本文件

首先,我们需要准备一个shell脚本,它将负责切换目录并运行目标程序。建议把脚本放在一个固定位置,比如你的文档目录下。

打开终端,执行以下命令创建脚本目录和文件:

mkdir -p ~/Documents/scripts nano ~/Documents/scripts/auto_run_test.sh

在编辑器中输入以下内容(注意:复制时请确保符号为英文格式):

#!/bin/bash # 记录启动日志 echo "[$(date)] Startup triggered" > ~/Documents/scripts/output.txt # 进入指定工作目录 cd /home/user/mywbc_v5_usb/build # 再次记录日志,确认已进入正确路径 echo "[$(date)] Entered build directory" >> ~/Documents/scripts/output.txt # 执行目标程序(此处为模拟器) if [ -f "./sim/sim" ]; then echo "[$(date)] Starting simulator..." >> ~/Documents/scripts/output.txt ./sim/sim & echo "[$(date)] Simulator launched in background" >> ~/Documents/scripts/output.txt else echo "[$(date)] ERROR: ./sim/sim not found!" >> ~/Documents/scripts/output.txt fi

这段脚本做了几件关键的事:

  • 使用$(date)添加时间戳,方便后续排查问题
  • 把所有日志写入output.txt,便于验证是否成功执行
  • 检查./sim/sim是否存在,避免因路径错误导致静默失败
  • 使用&让程序后台运行,防止阻塞系统启动流程

保存并退出(nano中按Ctrl+O → Enter → Ctrl+X)。

2.2 设置脚本执行权限

Linux默认不允许直接运行.sh文件,必须赋予执行权限:

chmod +x ~/Documents/scripts/auto_run_test.sh

这里使用+x777更安全,只添加执行权限,不开放读写权限给所有人。

验证是否设置成功:

ls -l ~/Documents/scripts/auto_run_test.sh

如果看到最前面有-rwxr-xr-x,说明权限已生效(其中x表示可执行)。

2.3 启用并配置rc.local服务

在较老版本的Ubuntu(如16.04、18.04)中,rc.local是标准的开机自启入口。但新版本默认禁用该服务,需手动启用。

先检查rc.local文件是否存在:

ls -l /etc/rc.local

如果提示“没有那个文件”,则手动创建:

sudo nano /etc/rc.local

输入以下标准模板内容:

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Add your commands here cd /home/user/Documents/scripts ./auto_run_test.sh exit 0

特别注意:

  • 第一行#!/bin/sh -e必须保留,这是shell解释器声明
  • cd命令必须写全路径,不能用~
  • 最后的exit 0必不可少,否则系统可能卡在启动阶段

保存后,设置rc.local可执行:

sudo chmod +x /etc/rc.local

最后启用rc-local服务(Ubuntu 18.04+必需):

sudo systemctl enable rc-local sudo systemctl start rc-local

检查服务状态:

sudo systemctl status rc-local

如果看到active (exited),说明配置成功。

3. 方法二:通过/etc/profile实现(兼容性更强,适用于无rc.local的系统)

3.1 什么情况下选择此方法

如果你使用的是Ubuntu 22.04或更新版本,或者执行ls /etc/rc.local发现文件不存在,那么rc.local很可能已被移除。此时推荐使用/etc/profile方案——它在每次用户登录时都会执行,对桌面环境和SSH登录均有效。

注意:此方法适用于图形界面登录或终端登录后自动触发,不是严格意义上的“系统级开机启动”,但对于绝大多数开发和测试场景完全够用。

3.2 修改profile文件

使用管理员权限编辑全局profile:

sudo nano /etc/profile

滚动到底部,在最后一行之前添加以下内容:

# Auto-run script for development environment if [ -f "/home/user/Documents/scripts/auto_run_test.sh" ] && [ "$(tty)" = "/dev/tty1" ]; then cd /home/user/Documents/scripts ./auto_run_test.sh > /dev/null 2>&1 & fi

这段逻辑的意思是:

  • 先检查脚本文件是否存在
  • 再判断当前是否为图形界面的第一个终端(tty1),避免在其他终端窗口重复执行
  • 后台静默运行脚本,不占用终端界面

保存退出后,该配置将在下次登录时生效。

如果你想立即测试(无需重启),可以手动加载profile:

source /etc/profile

但注意:这仅对当前终端有效,真正验证仍需重启或重新登录。

4. 验证与排错指南

4.1 如何确认脚本已执行

最简单的方式是检查日志文件:

cat ~/Documents/scripts/output.txt

正常情况下,你会看到类似这样的内容:

[Wed 10 Apr 2024 09:23:15 AM CST] Startup triggered [Wed 10 Apr 2024 09:23:15 AM CST] Entered build directory [Wed 10 Apr 2024 09:23:15 AM CST] Starting simulator... [Wed 10 Apr 2024 09:23:15 AM CST] Simulator launched in background

如果文件为空或只有第一行,说明脚本未被调用,需要检查以下几点:

  • 脚本路径是否拼写正确(尤其注意/home/user/中的用户名是否准确)
  • rc.localprofile中调用的路径是否与实际一致
  • 目标程序./sim/sim是否存在且具有执行权限(可用ls -l ./sim/sim确认)

4.2 常见问题及解决方案

问题现象可能原因解决方法
output.txt只有第一行脚本未执行到cd之后检查rc.localprofile中路径是否正确;确认exit 0是否遗漏
提示“Permission denied”脚本缺少执行权限运行chmod +x 脚本路径
提示“No such file or directory”目标程序路径错误进入/home/user/mywbc_v5_usb/build目录,执行ls ./sim/确认文件存在
图形界面启动后无反应profile方案未匹配tty1尝试去掉tty判断条件,或改用~/.bashrc(仅限当前用户)

如果你只想对当前用户生效(更安全),可以把脚本调用写入~/.bashrc末尾:

echo 'cd /home/user/mywbc_v5_usb/build && ./sim/sim &' >> ~/.bashrc

这样每次打开新终端都会自动运行,适合日常开发调试。

5. 进阶技巧:让程序保持运行并监控状态

单纯启动程序还不够,有时我们需要确保它持续运行。比如你的模拟器意外崩溃后,希望能自动重启。

可以在原脚本中加入循环守护逻辑:

#!/bin/bash while true; do echo "[$(date)] Starting simulator..." >> ~/Documents/scripts/output.txt cd /home/user/mywbc_v5_usb/build if [ -f "./sim/sim" ]; then ./sim/sim echo "[$(date)] Simulator exited, restarting in 3 seconds..." >> ~/Documents/scripts/output.txt sleep 3 else echo "[$(date)] ERROR: Simulator binary missing!" >> ~/Documents/scripts/output.txt break fi done

这个版本会在程序退出后等待3秒,然后自动重启,形成一个简单的守护进程。当然,生产环境建议使用systemd服务管理,但对测试用途来说,这个轻量方案足够实用。

另一个实用技巧是添加PID文件,避免重复启动:

PID_FILE="/tmp/sim.pid" if [ -f "$PID_FILE" ] && kill -0 $(cat $PID_FILE) > /dev/null 2>&1; then echo "[$(date)] Simulator already running" >> ~/Documents/scripts/output.txt exit 0 fi ./sim/sim & echo $! > "$PID_FILE"

这样即使脚本被多次调用,也不会启动多个实例。

6. 总结

本文完整演示了如何让Ubuntu系统在开机或登录后,自动进入指定目录并执行程序。我们提供了两种主流方案:

  • rc.local方式:适用于Ubuntu 16.04–20.04,属于系统级启动,适合服务类应用
  • profile方式:兼容性更好,适用于22.04及以上版本,更适合开发测试场景

无论选择哪种方式,核心思路都是三步:写脚本 → 设权限 → 加入口。过程中特别要注意路径的绝对性、权限的合理性、以及错误处理的完整性。

你不需要记住所有命令,只需理解每个步骤的目的:脚本定义“做什么”,权限决定“能不能做”,配置文件决定“什么时候做”。掌握这个逻辑,以后遇到类似需求(比如开机启动Web服务器、自动挂载硬盘、定时同步数据),都能举一反三。

现在,你可以关掉这篇教程,打开终端,花5分钟把脚本跑起来——从此告别重复操作,让机器真正为你工作。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 1:17:48

AudioLDM-S音效神器实测:输入英文描述就能生成专业级音效

AudioLDM-S音效神器实测:输入英文描述就能生成专业级音效 你有没有过这样的时刻——正在剪辑一段短视频,突然发现缺一个“老式打字机咔嗒咔嗒”的声音;或者在做游戏原型,急需“雨夜巷口滴水远处警笛由远及近”的环境音&#xff0…

作者头像 李华
网站建设 2026/8/9 0:15:07

OpenCore Legacy Patcher实战指南:让旧款Mac重获新生的系统突破方案

OpenCore Legacy Patcher实战指南:让旧款Mac重获新生的系统突破方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 在科技产品快速迭代的浪潮中,许…

作者头像 李华
网站建设 2026/8/9 10:21:27

智谱AI GLM-Image实战:手把手教你生成高清艺术图像

智谱AI GLM-Image实战:手把手教你生成高清艺术图像 你有没有试过在脑海里构思一幅画面——比如“月光下的青瓷茶盏,釉面泛着幽蓝微光,背景是宋代水墨远山”——却苦于找不到合适的画师,也画不出自己想要的细节?现在&a…

作者头像 李华
网站建设 2026/7/31 10:37:17

SpringBoot+Vue 人格障碍诊断系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 人格障碍是一种复杂的心理健康问题,对个体的社会功能和生活质量产生深远影响。传统的人格障碍诊断主要依赖专业医生的临床经验,存在主观性强、效率低下等问题。随着信息技术的发展,基于人工智能和数据分析的辅助诊断系统逐渐成为研究热点…

作者头像 李华
网站建设 2026/7/23 8:53:40

SpringBoot+Vue 电商平台管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着互联网技术的快速发展,电子商务已成为现代商业活动的重要组成部分。电商平台不仅为消费者提供了便捷的购物体验,也为企业降低了运营成本并拓宽了销售渠道。然而,传统的电商系统在功能扩展性、用户体验和数据处理效率方面存在诸多不足…

作者头像 李华