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 # 查看是否开机自启

相关推荐
梦想很大很大3 小时前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
Sinclair4 小时前
内网服务器离线安装 Nginx+PHP+MySQL 的方法
运维
叶落阁主4 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
0xDevNull11 小时前
Linux切换JDK版本详细教程
linux
进击的丸子11 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
字节逆旅1 天前
ubuntu应用深度守护
ubuntu
甲鱼9291 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端