news 2026/4/23 12:25:26

每天开机都自动记录?test.log生成实测分享

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每天开机都自动记录?test.log生成实测分享

每天开机都自动记录?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_test

3.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] Description=AutoRun Service - 开机自启动日志记录 After=network.target # 可选:如果你还希望休眠唤醒后也触发,可添加: # After=suspend.target hibernate.target hybrid-sleep.target [Service] Type=simple User=Ubuntu WorkingDirectory=/home/Ubuntu/Desktop/startup_test ExecStart=/home/Ubuntu/Desktop/startup_test/test.sh StandardOutput=append:/home/Ubuntu/Desktop/startup_test/service.log StandardError=append:/home/Ubuntu/Desktop/startup_test/error.log [Install] WantedBy=multi-user.target

4.2 配置项详解

字段作用
Description服务描述,便于识别
After=network.target确保网络服务启动后再运行此脚本(适用于需联网的任务)
User=Ubuntu指定以哪个用户身份运行(根据实际用户名调整)
WorkingDirectory设置脚本运行的工作目录
ExecStart指定要执行的命令或脚本(必须用绝对路径)
StandardOutput/StandardError将服务输出和错误分别记录到日志文件,便于排查问题
WantedBy=multi-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 ago"

7. 常见问题与解决方案

尽管流程看似简单,但在实际部署中仍可能遇到一些坑。以下是我在实测过程中总结的常见问题及应对策略。

7.1 日志文件未生成或无写入权限

现象test.log不存在,或权限拒绝。

原因:脚本运行用户对目标目录无写权限。

解决

  • 确保User=设置正确
  • 提前创建日志文件并授权:
touch ~/Desktop/startup_test/test.log chmod 644 ~/Desktop/startup_test/test.log

7.2 脚本路径错误导致找不到文件

现象systemctl status显示No such file or directory

原因ExecStart使用了相对路径或拼写错误。

解决

  • 全程使用pwdls核对路径
  • 推荐使用realpath test.sh获取完整绝对路径

7.3 服务未启用或未重新加载

现象:重启后无日志,但手动运行脚本正常。

原因:忘记执行daemon-reloadenable

解决

  • 重新执行:
sudo systemctl daemon-reload sudo systemctl enable AutoRun.service

7.4 脚本没有执行权限

现象:Permission denied when executing script.

解决

chmod +x ~/Desktop/startup_test/test.sh

8. 扩展应用:不止于 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]中添加:

After=suspend.target hibernate.target hybrid-sleep.target

并在[Service]中设置:

WakeSystem=true

再配合定时器或 udev 规则,实现更复杂的电源事件响应。


9. 总结

通过本次实测,我们成功实现了在 Ubuntu 系统中利用systemd服务机制,让test.log文件在每次开机时自动追加一条日志记录。整个过程不依赖图形界面、不依赖用户登录,具备良好的稳定性和通用性。

回顾关键步骤:

  1. 编写脚本test.sh负责具体逻辑(写日志)
  2. 创建服务AutoRun.service定义何时、以谁的身份运行
  3. 安装服务:复制到/etc/systemd/system/并重新加载
  4. 启用服务systemctl enable加入开机启动
  5. 验证结果:重启后检查日志文件和服务状态

这套方法不仅适用于日志记录,还可广泛应用于:

  • 自动挂载磁盘
  • 启动后台守护进程
  • 初始化环境变量
  • 定期备份任务预加载

只要你想让某件事“一开机就发生”,都可以用这种方式搞定。


获取更多AI镜像

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

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

快速上手verl:5步完成大模型强化学习部署

快速上手verl:5步完成大模型强化学习部署 1. 为什么你需要关注 verl? 你有没有遇到过这种情况:想用强化学习(RL)优化大语言模型,但发现训练流程复杂、资源消耗大、扩展性差?尤其是在处理像 PP…

作者头像 李华
网站建设 2026/4/23 12:24:19

cube-studio实战指南:从零开始构建AI应用完整流程

cube-studio实战指南:从零开始构建AI应用完整流程 【免费下载链接】cube-studio cube studio开源云原生一站式机器学习/深度学习AI平台,支持sso登录,多租户/多项目组,数据资产对接,notebook在线开发,拖拉拽…

作者头像 李华
网站建设 2026/4/23 12:24:33

微软UserLM-8b:AI用户对话模拟的终极工具

微软UserLM-8b:AI用户对话模拟的终极工具 【免费下载链接】UserLM-8b 项目地址: https://ai.gitcode.com/hf_mirrors/microsoft/UserLM-8b 导语:微软最新发布的UserLM-8b模型打破传统大语言模型定位,专注模拟用户对话行为&#xff0c…

作者头像 李华
网站建设 2026/4/23 10:39:03

GPEN模型版权问题?引用规范与商业使用注意事项

GPEN模型版权问题?引用规范与商业使用注意事项 你是不是也遇到过这样的困惑:在项目里用了GPEN做老照片修复,或者集成进产品做人像增强,突然想到——这个模型能商用吗?要不要署名?引用格式对不对&#xff1…

作者头像 李华
网站建设 2026/4/7 19:49:57

开源AI笔记终极指南:Open Notebook完全使用手册

开源AI笔记终极指南:Open Notebook完全使用手册 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 还在为知识管理效率低…

作者头像 李华
网站建设 2026/4/23 12:24:14

2025年PlayIntegrityFix完整解决指南:3步告别Android验证烦恼

2025年PlayIntegrityFix完整解决指南:3步告别Android验证烦恼 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 当你发现心爱的Android应用突然无法正常…

作者头像 李华