C++编译可执行文件在Linux系统开机自启配置

1、脚本.sh文件编写,以名为drone_down可执行程序为例:

复制代码
#!/bin/bash
# 补全cron缺失的环境变量
source $HOME/.bashrc

# ========== 配置项,改成你自己的路径 ==========
# C++编译后的可执行文件绝对路径
APP_DIR="/home/nvidia/drone_down/build"
APP_BIN="${APP_DIR}/drone_down"
# 日志存放路径
LOG_FILE="${APP_DIR}/cpp_run.log"
# ============================================

# 切换到程序目录(解决程序读取本地配置文件找不到的问题)
cd "${APP_DIR}" || exit 1

# 1. 校验可执行文件是否存在
if [ ! -f "${APP_BIN}" ]; then
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 错误:C++可执行文件不存在 ${APP_BIN}" >> "${LOG_FILE}"
    exit 1
fi

# 2. 校验是否具备执行权限
if [ ! -x "${APP_BIN}" ]; then
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 赋予可执行文件执行权限" >> "${LOG_FILE}"
    chmod +x "${APP_BIN}"
fi

# 3. 防止重复启动,检测进程
RUN_PID=$(pgrep -f "${APP_BIN}")
if [ -n "${RUN_PID}" ]; then
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] C++程序已在运行,PID:${RUN_PID}" >> "${LOG_FILE}"
    exit 0
fi

sleep 5
# 4. 启动C++程序,日志输出到文件
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 启动C++编译程序 ${APP_BIN}" >> "${LOG_FILE}"
#${APP_BIN} >> "${LOG_FILE}" 2>&1
stdbuf -oL "${APP_BIN}" 2>&1 | tee cpp_run.log

# 记录启动后的进程号
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 程序启动成功,PID:$!" >> "${LOG_FILE}"

2、开机自启配置

执行如下命令:

复制代码
gnome-session-properties

打开设置界面

在command中输入:

复制代码
gnome-terminal --title="drone_down" -- bash -c "/path/to/your/xx.sh; exec bash"