2026/4/17 10:40:32
网站建设
项目流程
合肥建设干部学校网站,中核华兴建设有限公司网站,搜狗seo快速排名公司,湖北省建筑特种作业人员证书亲测可用#xff01;Ubuntu开机启动脚本一键配置#xff0c;小白也能轻松上手
你是不是也遇到过这样的问题#xff1a;每次重启Ubuntu系统后#xff0c;都要手动运行一堆服务或脚本#xff1f;比如自建的Web服务、数据采集程序、监控脚本等等。反复操作不仅麻烦#xff…亲测可用Ubuntu开机启动脚本一键配置小白也能轻松上手你是不是也遇到过这样的问题每次重启Ubuntu系统后都要手动运行一堆服务或脚本比如自建的Web服务、数据采集程序、监控脚本等等。反复操作不仅麻烦还容易遗漏。有没有一种方法能让这些任务在系统开机时自动运行答案是肯定的——设置开机启动脚本。本文将带你一步步完成Ubuntu系统下开机启动脚本的配置所有方法均基于实际测试环境验证通过尤其推荐第一种方式简单稳定适合新手和生产环境使用。即使你是Linux小白也能照着步骤轻松搞定。1. 为什么需要开机启动脚本在日常使用Ubuntu的过程中我们常常会部署一些长期运行的服务或自定义脚本例如自动同步文件的rsync任务后台运行的Python爬虫自建的API服务如Flask、Node.js系统资源监控工具如果每次重启都要手动启动这些程序效率低且容易出错。而通过配置开机自启脚本可以让系统在启动完成后自动执行指定命令真正做到“一次配置永久省心”。接下来我将介绍几种常见的实现方式并重点推荐经过实测最稳定的方案。2. 方法一创建独立的init.d脚本亲测可用强烈推荐这是目前在传统SysVinit和兼容systemd的Ubuntu版本中都表现良好的经典方法。适用于Ubuntu 18.04、20.04、22.04等主流版本。### 2.1 编写启动脚本首先在用户主目录下创建一个Shell脚本文件比如叫run.shcd ~ nano run.sh粘贴以下内容到文件中#!/bin/sh ### BEGIN INIT INFO # Provides: run.sh # Required-start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start custom script at boot # Description: Runs a user-defined script during system startup ### END INIT INFO # 进入目标项目目录 cd /home/ubuntu/trx # 获取sudo权限请替换为你的真实密码 echo your_password | sudo -S ls /dev/null 21 # 执行你的主程序示例为后台运行的脚本 sudo -S nohup ./bin/mywork /var/log/mywork.log 21 重要说明your_password需要替换成你当前用户的登录密码明文存储有安全风险请见后续建议。使用nohup和可确保脚本在后台持续运行不受终端关闭影响。日志输出重定向至/var/log/mywork.log便于后期排查问题。保存并退出编辑器CtrlO → Enter → CtrlX。### 2.2 移动脚本到系统启动目录将脚本复制到/etc/init.d/目录并赋予可执行权限sudo cp ~/run.sh /etc/init.d/ sudo chmod x /etc/init.d/run.sh### 2.3 注册为开机启动项使用update-rc.d命令注册该脚本为系统服务sudo update-rc.d run.sh defaults 95这里的95是启动优先级数字越大越晚启动。如果你的脚本依赖网络服务如访问远程数据库建议设为90以上确保网络已就绪。### 2.4 测试与验证重启系统观察脚本是否自动运行sudo reboot系统重启后检查日志确认程序已启动cat /var/log/mywork.log ps aux | grep mywork如果看到进程存在且日志正常输出说明配置成功### 2.5 卸载开机启动可选若想取消开机启动执行以下命令即可sudo update-rc.d -f run.sh remove这会清除相关的软链接但不会删除/etc/init.d/run.sh文件本身。3. 方法二利用rc.local实现开机执行备选方案对于不想管理复杂脚本的用户可以使用系统自带的rc.local文件来添加启动命令。虽然部分新版本Ubuntu默认不启用此功能但我们可以通过简单配置恢复它。### 3.1 检查rc.local是否存在ls /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. # 自定义任务开始 /home/ubuntu/run.sh exit 0注意最后一行必须是exit 0否则可能导致系统卡在启动界面。### 3.2 赋予执行权限sudo chmod x /etc/rc.local### 3.3 启用rc-local服务Ubuntu 20.04需额外操作新版Ubuntu默认未启用rc.local需手动激活sudo systemctl enable rc-local sudo systemctl start rc-local查看状态确认是否运行sudo systemctl status rc-local如果显示active (exited)说明已成功加载。⚠️注意事项rc.local在所有服务启动后才执行适合对网络、文件系统有依赖的任务。不支持交互式命令如弹窗、图形界面操作。若脚本阻塞长时间不返回会影响系统启动速度。4. 方法三通过systemd服务管理高级推荐虽然参考博文未亲测但作为现代Linux系统的标准做法systemd是更优雅、更安全的选择特别适合需要精细控制的服务。### 4.1 创建service文件sudo nano /etc/systemd/system/mywork.service写入以下内容[Unit] DescriptionCustom Startup Script Afternetwork.target [Service] Typesimple Userubuntu WorkingDirectory/home/ubuntu/trx ExecStart/usr/bin/sudo /home/ubuntu/trx/bin/mywork Restartalways StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target### 4.2 启用并启动服务sudo systemctl daemon-reexec sudo systemctl enable mywork.service sudo systemctl start mywork.service查看运行状态sudo systemctl status mywork.service优势支持日志追踪journalctl -u mywork.service可设置自动重启、超时、依赖关系更安全无需在脚本中硬编码密码5. 安全性优化建议前面的方法中使用了明文密码echo password | sudo -S存在安全隐患。以下是几种改进方案### 5.1 使用免密sudo权限编辑sudoers文件sudo visudo在末尾添加ubuntu ALL(ALL) NOPASSWD: /home/ubuntu/trx/bin/mywork这样该用户在执行特定命令时无需输入密码既方便又可控。### 5.2 使用专用账户运行服务避免使用个人账户运行后台服务建议创建专用用户sudo adduser --system --no-create-home --group myapp sudo chown -R myapp:myapp /home/ubuntu/trx/bin/mywork然后在systemd服务中指定Usermyapp。6. 常见问题与解决方案问题现象可能原因解决方法脚本未执行权限不足确保脚本具有x权限提示“command not found”PATH环境变量缺失在脚本开头显式声明PATHPATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin依赖服务未就绪启动顺序错误提高优先级延迟启动或使用Afternetwork.target输出信息丢失未重定向日志添加 /var/log/start.log 21图形界面程序无法启动DISPLAY变量未设置若需GUI应使用桌面级自启动~/.config/autostart7. 总结本文详细介绍了四种Ubuntu开机启动脚本的配置方式结合实测经验给出如下建议1. 推荐方案选择普通用户 快速上手✅ 使用方法一init.d脚本结构清晰兼容性强适合大多数场景。追求现代化管理✅ 使用方法三systemd服务功能强大日志完善更适合生产环境。临时小任务✅ 使用方法二rc.local简单直接适合一次性配置。2. 实用技巧回顾脚本务必添加### BEGIN INIT INFO元信息块否则update-rc.d可能报错。启动优先级建议设为90~99避免因依赖服务未就绪导致失败。所有输出建议重定向到日志文件方便调试。尽量避免在脚本中明文写密码优先使用NOPASSWDsudo规则提升安全性。3. 下一步建议完成基础配置后你可以进一步探索结合cron做周期性健康检查使用supervisor管理复杂进程组将启动脚本打包为deb安装包便于批量部署只要按照本文步骤操作即使是Linux新手也能轻松实现Ubuntu系统的自动化启动配置。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。