温馨提示×

Debian Context下如何自定义启动项

小樊
47
2025-11-14 20:37:21
栏目: 智能运维

Debian 自定义启动项实用指南

一 服务类自启动 systemd

  • 适用于将脚本或程序作为系统服务在开机时自动运行,并支持启动、停止、重启、开机启用等完整生命周期管理。
  • 操作步骤:
    1. 创建服务单元文件:sudo nano /etc/systemd/system/my_service.service
    2. 写入示例内容(按需调整 ExecStart、User、After 等):
      [Unit]
      Description=My Custom Service
      After=network.target
      
      [Service]
      ExecStart=/usr/bin/my_service_executable
      Restart=always
      User=my_user
      Group=my_group
      
      [Install]
      WantedBy=multi-user.target
      
    3. 使配置生效并启用开机自启:
      • 重新加载 systemd 配置:sudo systemctl daemon-reload
      • 开机启用:sudo systemctl enable my_service.service
      • 立即启动:sudo systemctl start my_service.service
      • 查看状态:systemctl status my_service.service
      • 停止/禁用:sudo systemctl stop|disable my_service.service
  • 常用命令速查:
    • 查看运行中的服务:systemctl list-units --type=service --state=running
    • 按服务名启停:sudo systemctl start|stop|restart service_name
    • 开机启用/禁用:sudo systemctl enable|disable service_name

二 快速执行命令 rc.local 或一次性任务

  • 适合在系统进入多用户目标后执行少量自定义命令(不推荐用于长期守护进程)。
  • 操作步骤:
    1. 编辑或创建:sudo nano /etc/rc.local
    2. 在 exit 0 之前添加命令,例如:
      #!/bin/sh -e
      /usr/bin/my-script.sh &
      exit 0
      
    3. 赋权并启用服务:
      • 赋权:sudo chmod +x /etc/rc.local
      • 启用并启动:sudo systemctl enable --now rc-local.service
      • 检查状态:systemctl status rc-local.service
  • 如需定时或周期任务,优先使用 systemd 定时器 替代 rc.local 的循环逻辑

三 图形会话自启动 桌面环境

  • 适用于登录图形桌面后自动启动应用(如浏览器 kiosk、自启面板等)。
  • 操作步骤:
    1. 在用户目录创建自启动项:nano ~/.config/autostart/myapp.desktop
    2. 示例内容:
      [Desktop Entry]
      Type=Application
      Exec=/usr/bin/chromium --kiosk http://your-url.com
      Hidden=false
      NoDisplay=false
      X-GNOME-Autostart-enabled=true
      Name=My Browser
      Comment=Start browser on boot
      
    3. 保存后重新登录即可生效(部分桌面可能需要重启会话或应用)

四 引导加载器 GRUB 自定义菜单与内核参数

  • 适用于添加自定义菜单项、临时或永久调整内核启动参数(如进入单用户模式、关闭某项内核功能等)。
  • 操作步骤:
    1. 临时修改:开机出现 GRUB 菜单时按 e,在以 linux 开头的内核行末尾追加参数(如 singleinit=/bin/bash),按 Ctrl+X 启动(本次有效)。
    2. 永久修改:
      • 编辑:sudo nano /etc/default/grub
      • GRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULT 中添加参数(如 acpi=off
      • 更新配置:sudo update-grub
      • 重启:sudo reboot
    3. 添加全新菜单项:
      • 编辑:sudo nano /etc/grub.d/40_custom,以现有 menuentry 为模板新增条目
      • 更新:sudo update-grub 并重启查看新菜单

五 兼容旧系统 SysVinit 脚本方式

  • 适用于 Debian 7/8 等仍使用 SysVinit 的场景,或维护遗留脚本。
  • 操作步骤:
    1. 创建脚本:sudo nano /etc/init.d/my_service
    2. 基本结构与 LSB 头示例:
      #!/bin/sh
      ### BEGIN INIT INFO
      # Provides:          my_service
      # Required-Start:    $local_fs $network
      # Required-Stop:     $local_fs $network
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: My custom service
      # Description:       Start my custom daemon
      ### END INIT INFO
      
      case "$1" in
        start)
          echo "Starting my_service..."
          /usr/bin/my_service_executable &
          ;;
        stop)
          echo "Stopping my_service..."
          killall my_service_executable
          ;;
        restart)
          $0 stop
          $0 start
          ;;
        *)
          echo "Usage: $0 {start|stop|restart}"
          exit 1
          ;;
      esac
      exit 0
      
    3. 赋权并加入启动项:
      • 赋权:sudo chmod +x /etc/init.d/my_service
      • 启用开机启动:sudo update-rc.d my_service defaults
      • 手动控制:sudo /etc/init.d/my_service start|stop|restart
      • 移除:sudo update-rc.d -f my_service remove
  • 提示:现代 Debian 默认使用 systemd,仅在必要时保留 SysV 脚本

0