当前位置: 首页 > news >正文

新手必看:如何让脚本随系统自动运行?超详细教程

新手必看:如何让脚本随系统自动运行?超详细教程

1. 引言

在实际的开发和运维场景中,我们常常需要让某些关键任务或服务在系统启动时自动运行,比如模型推理服务、数据采集脚本、监控程序等。对于刚接触 Linux 系统管理的新手来说,实现“开机自启”可能显得有些神秘。本文将带你从零开始,手把手掌握两种主流且稳定的方法:Systemd 服务方式Crontab @reboot 方式,确保你的脚本能够可靠地随系统启动而自动执行。

通过本教程,你将学会:

  • 如何创建可执行的服务脚本
  • 使用 Systemd 实现专业级开机启动
  • 利用 Crontab 快速配置用户级自启任务
  • 验证服务状态与排查常见问题

无论你是部署 AI 模型、自动化工具还是后台服务,这套方法都完全适用。


2. 方法一:使用 Systemd 创建系统服务(推荐)

Systemd 是现代 Linux 发行版的标准初始化系统和服务管理器,具备强大的依赖控制、日志追踪和自动重启能力,是实现开机自启最推荐的方式。

2.1 创建可执行脚本

首先,确保你要启动的脚本具有可执行权限。以一个 Python 脚本为例:

#!/bin/bash # 脚本路径:/home/test/stu_zx/2/ultralytics-main/start_model.py python /home/test/stu_zx/2/ultralytics-main/start_model.py

赋予执行权限:

chmod +x /home/test/stu_zx/2/ultralytics-main/start_model.py

注意:如果脚本依赖特定 Conda 环境(如pytorch_env),需在服务中显式激活环境。

2.2 编写 Systemd 服务文件

创建服务配置文件:

sudo nano /etc/systemd/system/my_script.service

写入以下内容:

[Unit] Description=Run my custom script at startup After=network.target [Service] Type=simple User=test Group=test ExecStartPre=/bin/bash -c 'source /home/test/anaconda3/bin/activate pytorch_env' ExecStart=/usr/bin/python /home/test/stu_zx/2/ultralytics-main/start_model.py WorkingDirectory=/home/test/stu_zx/2/ultralytics-main Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
参数说明:
字段说明
Description服务描述信息
After=network.target表示在网络服务启动后运行
User/Group指定运行用户,避免权限问题
ExecStartPre启动前执行命令,用于激活 Conda 环境
ExecStart主要执行命令
WorkingDirectory设置工作目录,防止路径错误
Restart=always崩溃后自动重启
WantedBy=multi-user.target表示多用户模式下启用

2.3 启用并启动服务

刷新 systemd 配置:

sudo systemctl daemon-reload

启用开机自启:

sudo systemctl enable my_script.service

立即启动服务:

sudo systemctl start my_script.service

2.4 查看服务状态

检查是否正常运行:

sudo systemctl status my_script.service

输出示例:

● my_script.service - Run my custom script at startup Loaded: loaded (/etc/systemd/system/my_script.service; enabled) Active: active (running) since Mon 2025-04-05 10:00:00 CST; 5s ago Main PID: 1234 (python) Tasks: 1 Memory: 80.0M CGroup: /system.slice/my_script.service └─1234 /home/test/anaconda3/envs/pytorch_env/bin/python /home/test/stu_zx/2/ultralytics-main/start_model.py

若显示active (running),则表示服务已成功启动。

2.5 测试开机自启效果

重启系统验证:

sudo reboot

系统重启后,再次运行systemctl status my_script.service,确认服务自动启动。


3. 方法二:使用 Crontab 的 @reboot 触发器

Crontab 是 Linux 的定时任务工具,除了周期性任务外,还支持@reboot特殊标记,表示仅在系统启动时执行一次,适合轻量级脚本自启。

3.1 创建启动脚本

新建一个 Shell 脚本用于封装环境加载和程序调用:

nano ~/start_pytorch.sh

内容如下:

#!/bin/bash # 激活 Conda 环境并运行 Python 脚本 source /home/test/anaconda3/etc/profile.d/conda.sh conda activate pytorch_env python /home/test/stu_zx/2/ultralytics-main/1.py

说明:使用conda activate前必须先 sourceconda.sh,否则会报 command not found。

保存后添加执行权限:

chmod +x ~/start_pytorch.sh

3.2 配置 Crontab 自启任务

编辑当前用户的 crontab:

crontab -e

在文件末尾添加:

@reboot /home/test/start_pytorch.sh

注意:路径必须为绝对路径,不能使用~

保存退出后,Crontab 会在下次系统启动时自动执行该脚本。

3.3 验证 Crontab 是否生效

你可以通过查看系统日志来确认任务是否触发:

grep CRON /var/log/syslog | tail -n 10

如果看到类似以下输出,说明已触发:

Apr 5 10:05:01 ubuntu CRON[1234]: (test) CMD (/home/test/start_pytorch.sh)

3.4 两种方法对比分析

对比维度SystemdCrontab @reboot
执行时机系统初始化阶段可控(可设依赖)开机后尽早执行,但无精确顺序控制
日志管理支持journalctl查看完整日志需手动重定向日志到文件
权限控制可指定运行用户、组、环境变量默认以当前用户身份运行
自动重启支持崩溃后自动重启(Restart=always)仅执行一次,失败不重试
适用场景生产环境服务、长期运行进程轻量级脚本、一次性初始化任务

建议:对于 AI 推理、Web 服务等关键应用,优先选择Systemd;对于简单初始化脚本,可用Crontab快速实现。


4. 常见问题与解决方案

4.1 Conda 环境无法激活

现象CommandNotFoundError: No such command: conda

原因:Shell 环境未加载 Conda 初始化脚本。

解决方法

在脚本中显式 source:

source /home/test/anaconda3/etc/profile.d/conda.sh

或使用完整路径调用解释器:

/home/test/anaconda3/envs/pytorch_env/bin/python your_script.py

后者更稳定,推荐用于生产环境。

4.2 脚本路径错误导致启动失败

建议:所有路径使用绝对路径,避免相对路径引发问题。

可在脚本开头添加调试信息:

echo "[$(date)] Starting script..." >> /tmp/startup.log

便于排查执行流程。

4.3 权限不足问题

确保:

  • 脚本有执行权限:chmod +x script.py
  • 目标用户对脚本路径有读取权限
  • 若涉及网络端口(如 80/443),考虑使用sudo或 Capabilities 提权

4.4 如何查看启动日志?

使用 journalctl 查看 Systemd 服务日志:

sudo journalctl -u my_script.service -f

实时跟踪日志输出,快速定位异常。


5. 总结

5. 总结

本文详细介绍了两种让脚本随系统自动运行的核心方法:

  1. Systemd 服务方式:适用于生产级服务部署,支持精细控制、自动重启和集中日志管理,是推荐的工业标准做法。
  2. Crontab @reboot 方式:配置简单,适合轻量级任务或用户级自启需求,但缺乏进程监控能力。

无论选择哪种方式,关键点在于:

  • 使用绝对路径
  • 正确激活 Conda 环境
  • 设置合理的用户权限
  • 添加日志输出以便调试

掌握这些技能后,你已经具备了将任何脚本(Python、Shell、Node.js 等)部署为开机自启服务的能力,为后续构建自动化系统打下坚实基础。


获取更多AI镜像

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

http://www.jsqmd.com/news/259835/

相关文章:

  • 全网最全专科生AI论文工具TOP9:毕业论文写作必备测评
  • Open-AutoGLM深度体验:视觉理解能力实测
  • Z-Image-ComfyUI真实测评:三大模型谁更值得用
  • RHCA第二次作业
  • DeepSeek-R1-Distill-Qwen-1.5B性能瓶颈?GPU利用率提升策略
  • 基于微信小程序的四六级词汇学习平台【源码+文档+调试】
  • Fun-ASR常见报错解决方案:CUDA内存不足怎么办
  • Qwen3-Embedding-4B部署经验:生产环境常见问题解决
  • BAAI/bge-m3资源占用高?轻量化部署与内存优化策略
  • Youtu-2B文案创作实战:营销文案生成步骤详解
  • YOLO26 改进 - 注意力机制 | DCAFE双坐标注意力:并行坐标注意力 + 双池化融合
  • Z-Image-Turbo快速上手:集成LangChain打造图文生成Agent
  • TensorFlow模型分析工具:GPU加速可视化不卡顿
  • 担心黑盒模型?AI 印象派艺术工坊可解释性算法部署实战
  • IndexTTS-2-LLM性能瓶颈分析:CPU占用过高优化指南
  • DeepSeek-R1-Distill-Qwen-1.5B实战教程:Jupyter调用模型详细步骤
  • ArchiveMaster归档大师 v2.2.0:高效文件管理工具
  • 如何提升Qwen3-1.7B响应速度?GPU加速部署实战
  • 基于非合作博弈的风-光-氢微电网容量优化配置(Matlab代码实现)
  • 2026年上海防水服务TOP5权威评测:精准治漏,守护建筑安全 - shruisheng
  • 电商产品图批量抠图方案|基于CV-UNet大模型镜像高效落地
  • Wan2.2部署方案:高可用视频生成服务的容灾设计
  • GESP认证C++编程真题解析 | 202409 四级
  • 全网最全10个AI论文平台,MBA高效写作必备!
  • SPI数据帧结构详解:为何c++spidev0.0 read读出255
  • 基于Modbus的RS485通信系统学习
  • 大数据技术领域发展与Spark的性能优化
  • [sublime text] add sublime text to context menu 右键菜单中“Open with Sublime Text”
  • 机遇,颓废,醒悟,挫折?奋进!
  • 体验大模型图像处理:云端免配置方案,按需付费不浪费