2026/2/25 7:50:01
网站建设
项目流程
福田企业的网站建设公司好吗,软件外包平台的服务商,线上平面设计培训班,重庆网站建设加q.479185700每天开机都自动记录#xff1f;test.log生成实测分享
你有没有遇到过这样的需求#xff1a;系统每次开机#xff0c;都想留下点“痕迹”——比如记录时间、运行状态#xff0c;或者只是简单打个卡#xff1f;听起来像极了那种“我已上线”的仪式感。最近我在测试一个名为…每天开机都自动记录test.log生成实测分享你有没有遇到过这样的需求系统每次开机都想留下点“痕迹”——比如记录时间、运行状态或者只是简单打个卡听起来像极了那种“我已上线”的仪式感。最近我在测试一个名为“测试开机启动脚本”的镜像环境时正好碰上了这个场景如何让系统在每次开机时自动生成一条日志记录到test.log文件中本文将带你从零开始完整走一遍Ubuntu 系统下实现开机自动写入日志的全过程不依赖图形界面不靠第三方工具只用系统原生服务机制确保方法通用、稳定、可复现。无论你是想做自动化监控、状态追踪还是仅仅出于好奇这篇实测分享都能让你快速上手。1. 需求拆解我们到底要做什么我们的目标非常明确每次系统开机或重启后自动执行一段脚本向指定路径下的test.log文件追加一条日志例如“这是一个开机自启动的测试程序。”脚本无需人工干预全程后台静默运行这背后的核心技术点是Linux 系统的服务管理机制systemd。它不仅能控制服务启停还能定义哪些任务需要随系统启动而自动加载。2. 实现原理为什么选择 systemd 服务在 Linux 中有多种方式可以实现开机自启动比如修改.bashrc或.profile使用cron reboot编写 init 脚本配置桌面环境的“启动应用程序”但这些方法各有局限用户登录才触发、依赖 GUI、兼容性差等。而systemd 是现代 Linux 发行版的标准初始化系统具备以下优势系统级服务无需用户登录即可运行支持依赖管理如等待网络就绪可设置失败重试、日志追踪配置文件结构清晰易于维护因此我们要做的就是创建一个自定义的 systemd 服务单元.service让它在开机时调用我们的日志写入脚本。3. 准备工作搭建测试环境我使用的环境是一个基于 Ubuntu 的轻量级镜像“测试开机启动脚本”其描述为“测试开机启动脚本”文档内容为“测试开机启动脚本1”。虽然信息简略但这并不影响我们手动配置。3.1 创建脚本存放目录为了便于管理我们在桌面创建一个专用目录来存放脚本和日志文件mkdir -p ~/Desktop/startup_test cd ~/Desktop/startup_test3.2 编写日志写入脚本 test.sh接下来编写核心脚本test.sh功能是向test.log追加当前时间和提示信息。#!/bin/bash # 定义日志文件路径 LOG_FILE/home/Ubuntu/Desktop/startup_test/test.log # 获取当前时间 TIMESTAMP$(date %Y-%m-%d %H:%M:%S) # 写入日志 echo [$TIMESTAMP] 这是一个开机自启动的测试程序。 $LOG_FILE说明使用$(date ...)记录精确时间戳方便后续验证是否真的每次开机都执行所有路径使用绝对路径避免因工作目录不同导致失败表示追加不会覆盖历史记录保存后赋予可执行权限chmod x test.sh你可以先手动运行一次看看效果./test.sh cat test.log输出应类似[2025-04-05 10:23:15] 这是一个开机自启动的测试程序。4. 创建 systemd 服务文件 AutoRun.service现在进入最关键的一步告诉系统“开机时请运行上面这个脚本”。4.1 编辑服务配置文件在任意位置创建AutoRun.service文件推荐放在当前项目目录下以便管理nano AutoRun.service输入以下内容[Unit] DescriptionAutoRun Service - 开机自启动日志记录 Afternetwork.target # 可选如果你还希望休眠唤醒后也触发可添加 # Aftersuspend.target hibernate.target hybrid-sleep.target [Service] Typesimple UserUbuntu WorkingDirectory/home/Ubuntu/Desktop/startup_test ExecStart/home/Ubuntu/Desktop/startup_test/test.sh StandardOutputappend:/home/Ubuntu/Desktop/startup_test/service.log StandardErrorappend:/home/Ubuntu/Desktop/startup_test/error.log [Install] WantedBymulti-user.target4.2 配置项详解字段作用Description服务描述便于识别Afternetwork.target确保网络服务启动后再运行此脚本适用于需联网的任务UserUbuntu指定以哪个用户身份运行根据实际用户名调整WorkingDirectory设置脚本运行的工作目录ExecStart指定要执行的命令或脚本必须用绝对路径StandardOutput/StandardError将服务输出和错误分别记录到日志文件便于排查问题WantedBymulti-user.target表示该服务属于多用户模式下的默认启动组注意事项所有路径必须为绝对路径User必须存在且具有对应目录读写权限若脚本涉及 GUI 操作可能需要额外配置 DISPLAY 环境变量本文不涉及5. 安装并启用服务完成配置后需要将服务文件安装到系统目录并启用它。5.1 复制服务文件到系统目录sudo cp AutoRun.service /etc/systemd/system//etc/systemd/system/是用户自定义服务的标准存放位置。5.2 重新加载 systemd 配置sudo systemctl daemon-reload这一步非常重要否则系统无法识别新添加的服务。5.3 启用服务设为开机自启sudo systemctl enable AutoRun.service执行成功后会看到类似提示Created symlink /etc/systemd/system/multi-user.target.wants/AutoRun.service → /etc/systemd/system/AutoRun.service.这意味着该服务已被加入开机启动列表。6. 测试与验证重启看结果一切准备就绪现在进行最终测试。6.1 重启系统sudo reboot等待系统重新启动并登录。6.2 查看日志文件进入脚本目录查看test.log是否新增了一条记录cat ~/Desktop/startup_test/test.log你应该能看到至少两条记录包括之前手动测试的那条每条都有不同的时间戳[2025-04-05 10:23:15] 这是一个开机自启动的测试程序。 [2025-04-05 10:35:22] 这是一个开机自启动的测试程序。同时也可以检查服务自身的日志cat ~/Desktop/startup_test/service.log正常情况下应为空或包含启动信息。6.3 检查服务状态随时可通过以下命令查看服务运行状态systemctl status AutoRun.service关键观察点Active: active (running)或inactive (dead)因为我们是一次性脚本执行完即退出是正常的Loaded: loaded (/etc/systemd/system/AutoRun.service; enabled; vendor preset: enabled)如果出现错误可通过journalctl查看详细日志journalctl -u AutoRun.service --since 1 hour ago7. 常见问题与解决方案尽管流程看似简单但在实际部署中仍可能遇到一些坑。以下是我在实测过程中总结的常见问题及应对策略。7.1 日志文件未生成或无写入权限现象test.log不存在或权限拒绝。原因脚本运行用户对目标目录无写权限。解决确保User设置正确提前创建日志文件并授权touch ~/Desktop/startup_test/test.log chmod 644 ~/Desktop/startup_test/test.log7.2 脚本路径错误导致找不到文件现象systemctl status显示No such file or directory原因ExecStart使用了相对路径或拼写错误。解决全程使用pwd和ls核对路径推荐使用realpath test.sh获取完整绝对路径7.3 服务未启用或未重新加载现象重启后无日志但手动运行脚本正常。原因忘记执行daemon-reload或enable。解决重新执行sudo systemctl daemon-reload sudo systemctl enable AutoRun.service7.4 脚本没有执行权限现象Permission denied when executing script.解决chmod x ~/Desktop/startup_test/test.sh8. 扩展应用不止于 test.log你以为这只是个“写日志”的小把戏其实它的潜力远不止于此。8.1 记录系统健康状态修改test.sh加入系统信息采集echo [$TIMESTAMP] Host: $(hostname), IP: $(hostname -I), Load: $(uptime | awk {print $10}) $LOG_FILE这样每次开机就能看到主机名、IP 和负载情况。8.2 结合邮件或 webhook 发送通知进一步扩展脚本在开机后自动发送钉钉、企业微信或邮件提醒curl -X POST -H Content-Type: application/json \ -d {msg:服务器已开机上线} \ https://your-webhook-url.com/send适合远程服务器无人值守场景。8.3 支持休眠唤醒后再次触发参考原文提到的 Suspend 场景可在[Unit]中添加Aftersuspend.target hibernate.target hybrid-sleep.target并在[Service]中设置WakeSystemtrue再配合定时器或 udev 规则实现更复杂的电源事件响应。9. 总结通过本次实测我们成功实现了在 Ubuntu 系统中利用systemd服务机制让test.log文件在每次开机时自动追加一条日志记录。整个过程不依赖图形界面、不依赖用户登录具备良好的稳定性和通用性。回顾关键步骤编写脚本test.sh负责具体逻辑写日志创建服务AutoRun.service定义何时、以谁的身份运行安装服务复制到/etc/systemd/system/并重新加载启用服务systemctl enable加入开机启动验证结果重启后检查日志文件和服务状态这套方法不仅适用于日志记录还可广泛应用于自动挂载磁盘启动后台守护进程初始化环境变量定期备份任务预加载只要你想让某件事“一开机就发生”都可以用这种方式搞定。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。