ubuntu开机自启动脚本

1 准备文件

/usr/local/bin/runrobot.sh

bash 复制代码
#!/usr/bin/env bash
# /usr/local/bin/runrobot.sh

# 设置错误时退出
set -e

# 设置日志文件
LOG_FILE="/var/log/robot-start.log"
exec > >(tee -a "$LOG_FILE") 2>&1

echo "========================================"
echo "Robot Startup Script"
echo "Date: $(date)"
echo "User: $(whoami)"
echo "PID: $$"
echo "========================================"

# 1. 等待必要的服务就绪
echo "[1/4] Waiting for system services..."
sleep 5

# 2. 设置环境变量
echo "[2/4] Setting up environment..."
export HOME=/home/cat
export USER=cat
export SHELL=/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 如果使用图形界面
if [ -n "$DISPLAY" ]; then
    export DISPLAY=:0
    export XAUTHORITY=/home/cat/.Xauthority
fi

# 如果使用 ROS(根据实际情况调整)
if [ -f "/opt/ros/humble/setup.bash" ]; then
    source /opt/ros/humble/setup.bash
    echo "ROS environment sourced"
fi

# 3. 切换到用户目录
echo "[3/4] Changing to user directory..."
cd /home/cat

# 4. 执行用户启动脚本
echo "[4/4] Executing user startup script..."
if [ -f "/home/cat/start.sh" ]; then
    if [ -x "/home/cat/start.sh" ]; then
        echo "Starting: /home/cat/start.sh"
        # 使用 bash -c 来确保正确的 shell 环境
        sudo -u cat bash -i -c "cd /home/cat && /home/cat/start.sh"
        EXIT_CODE=$?
        echo "Start script exited with code: $EXIT_CODE"
    else
        echo "ERROR: /home/cat/start.sh is not executable"
        exit 1
    fi
else
    echo "ERROR: /home/cat/start.sh not found"
    exit 1
fi

echo "========================================"
echo "Robot Startup Script Finished"
echo "Date: $(date)"
echo "========================================"

/etc/systemd/system/robot-start.service

bash 复制代码
[Unit]
Description=Robot Startup Service
After=network.target network-online.target multi-user.target
Wants=network-online.target
Requires=multi-user.target

[Service]
Type=simple
User=cat
Group=cat
WorkingDirectory=/home/cat
Environment="HOME=/home/cat"
Environment="USER=cat"
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/cat/.Xauthority"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# 执行脚本(使用绝对路径)
ExecStart=/usr/local/bin/runrobot.sh

# 重启策略
Restart=on-failure
RestartSec=10

# 日志配置
StandardOutput=journal
StandardError=journal
SyslogIdentifier=robot-start

# 安全设置
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/home/cat /var/log

[Install]
WantedBy=multi-user.target

2 设置权限

sudo chmod 755 /usr/local/bin/runrobot.sh

sudo chmod 755 /home/cat/start.sh

sudo chmod 644 /etc/systemd/system/robot-start.service

sudo chown cat:cat /usr/local/bin/runrobot.sh

3 启动服务

sudo systemctl daemon-reload

sudo systemctl enable robot-start.service

sudo systemctl start robot-start.service

查看状态

sudo systemctl status robot-start.service --no-pager

查看服务依赖

systemd-analyze critical-chain robot-start.service

查看启动时间

systemd-analyze blame | grep robot

查看服务的所有属性

systemctl show robot-start.service

关闭开机自启动服务,下次开机不会再生效

sudo systemctl disable robot-start.service

systemctl is-active robot-start.service # 查看是否运行

systemctl is-enabled robot-start.service # 查看是否开机自启

相关推荐
wj3055853781 天前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
abigriver1 天前
打造 Linux 离线大模型级语音输入法:Whisper.cpp + 3090 显卡加速与 Rime 中英混输终极调优指南
linux·运维·whisper
wangqiaowq1 天前
windows下nginx的安装
linux·服务器·前端
YYRAN_ZZU1 天前
Petalinux新建自动脚本启动
linux
charlie1145141911 天前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发
Agent手记1 天前
异常考勤智能预警与处理与流程优化方案 | 基于企业级Agent的超自动化实战教程
运维·人工智能·ai·自动化
于小猿Sup1 天前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y1 天前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
不仙5201 天前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
AI视觉网奇1 天前
linux 检索库 判断库是否支持
java·linux·服务器