jetson orin nano自启服务

1.带有权限的代码(权限的区别就是一个代码里加了sudo一个没有)

install_service.sh 脚本将应用程序作为系统服务进行安装和管理,提供了更多的自动化和稳定性。start.sh 脚本直接运行应用程序

首先写一个服务install_service.sh(名字随便起,后缀是到了板子下得用这个,写代码先用python就行)紫色的是代码,黑色的是注释

#!/bin/bash
# 指定脚本的解释器,这里是 bash。

script_path=$(cd "$(dirname "$0")" && pwd)
# 获取脚本所在的完整目录路径。这个命令组合会先计算脚本文件($0)的目录路径,然后改变到那个目录并获取其绝对路径。

# 定义变量以便后续使用
SERVICE_NAME="algo_cokin_infer"
# 设置将要创建的服务的名称。

SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME.service"
# 定义服务文件的完整路径,该文件将存储在系统的 systemd 服务目录中。

WORKING_DIR="$script_path"
# 设置工作目录为脚本所在目录。

# 检查工作目录是否存在
if [ ! -d "$WORKING_DIR" ]; then
  echo "Error: $WORKING_DIR does not exist."
  exit 1
fi

# 如果指定的工作目录不存在,则打印错误消息并退出脚本。

# 检查 start.sh 是否存在
if [ ! -f "$WORKING_DIR/start.sh" ]; then
  echo "Error: $WORKING_DIR/start.sh does not exist."
  exit 1
fi

# 如果 start.sh 脚本文件不存在于工作目录中,则打印错误消息并退出脚本。

# 创建 service 文件
cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=$SERVICE_NAME service

# 服务的描述,出现在 systemd 的配置中。

[Service]
User=$(whoami)

# 指定运行服务的用户为当前用户。

ExecStart=/bin/bash "$WORKING_DIR/start.sh"
# 设置服务启动时执行的命令,这里是运行 start.sh 脚本。

WorkingDirectory=$WORKING_DIR
# 设置服务的工作目录。

Restart=on-failure
# 服务失败时自动重启。

RestartSec=10
# 服务重启之前等待的秒数。

[Install]
WantedBy=multi-user.target
EOF

# 设置服务在哪个系统级别下被自动启动,这里是 multi-user.target。

# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 使用 sudo 权限重新加载 systemd 的配置,使得任何对服务文件的修改生效。

# 启用并启动 service
sudo systemctl enable "$SERVICE_NAME.service"
# 使用 sudo 权限启用服务,使其在系统启动时自动启动。

sudo systemctl start "$SERVICE_NAME.service"
# 使用 sudo 权限启动服务。

然后写一个start.sh ,紫色得是代码,别的都是注释,前四条代码全是开发板添加的环境变量,开发板有几条环境变量就添加几条

# 设置 CUDA_HOME 环境变量,指定 CUDA 的安装目录,以便其他程序知道从何处找到 CUDA 相关文件。

export CUDA_HOME=/usr/local/cuda-11.4 

# 更新 LD_LIBRARY_PATH 环境变量,包括 CUDA 库的路径。这是 Linux 系统用于查找动态链接库的路径列表。

export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH

# 将 CUDA 的 bin 目录添加到 PATH 环境变量。这使得系统能够在任何目录下执行 CUDA 相关的命令。

export PATH=/usr/local/cuda-11.4/bin:$PATH

# 将 Anaconda 的 bin 目录添加到 PATH 环境变量。这确保了当你在命令行中输入 Python 或相关命令时,系统会首先从 Anaconda 的安装目录中查找这些命令。

export PATH="/home/jetson/anaconda3/bin:$PATH"

# 项目路径 就是要运行的.py文件的路径 # 切换当前工作目录到你的 Python 项目所在的目录。这通常是必须的步骤,因为 Python 程序可能依赖于相对路径来访问资源文件或其他脚本。

cd /home/jetson/hanjiejianguanjiqiren/hhhh

# 使用指定的 Conda 环境中的 Python 解释器执行 Python 程序。这里指定的是 `jetson` 环境中的 Python 解释器, # 脚本路径是 `/home/jetson/hanjiejianguanjiqiren/hhhh/hanjiejianguan_main.py`,这条命令将启动该 Python 程序。

/home/jetson/.conda/envs/jetson/bin/python /home/jetson/hanjiejianguanjiqiren/hhhh/hanjiejianguan_main.py

以上是sudo,启动服务需要加上sudo权限的代码,以上的代码报错跑不起来,就拿下边的

2.无权限的代码

有权限的代码在jetson orin nano4GB开发板报错,我这边用无权限的这个跑了一下没问题,不知道啥原因,有知道的评论区告诉我下

首先写一个服务install_service.sh(名字随便起,后缀是到了板子下得用这个,写代码先用python就行)紫色的是代码,黑色的是注释

#!/bin/bash
# 指定脚本运行的解释器为 bash

script_path=$(cd "$(dirname "$0")" && pwd)
# 将 script_path 设置为当前脚本所在的目录

SERVICE_NAME="hanjiejianguanjiqiren"
# 定义服务名

SERVICE_FILE="$HOME/.config/systemd/user/$SERVICE_NAME.service"
# 定义服务文件的路径

WORKING_DIR="$script_path"
# 设置工作目录为脚本所在的目录

# 确保用户级别的 systemd 目录存在
mkdir -p "$HOME/.config/systemd/user"
# 如果用户目录不存在,则创建它

if [ ! -d "$WORKING_DIR" ]; then
  echo "Error: $WORKING_DIR does not exist."
  exit 1
fi

# 检查工作目录是否存在,如果不存在则打印错误并退出

if [ ! -f "$WORKING_DIR/start.sh" ]; then
  echo "Error: $WORKING_DIR/start.sh does not exist."
  exit 1
fi

# 检查 start.sh 脚本是否存在,如果不存在则打印错误并退出

cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=$SERVICE_NAME service

[Service]
Environment="CUDA_HOME=/usr/local/cuda-11.4"

# 设置 CUDA_HOME 环境变量
Environment="LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH"
# 设置 LD_LIBRARY_PATH 环境变量,添加 CUDA 库路径
Environment="PATH=/usr/local/cuda-11.4/bin:/home/jetson/anaconda3/bin:$PATH"
# 设置 PATH 环境变量,添加 CUDA 可执行文件和 Anaconda 的 bin 目录
ExecStart=/bin/bash "$WORKING_DIR/start.sh"
# 定义服务启动时执行的命令
WorkingDirectory=$WORKING_DIR
# 设置服务的工作目录
Restart=on-failure
# 设置服务失败时重启
RestartSec=10
# 设置服务重启前的等待时间

[Install]
WantedBy=default.target

# 定义服务应该被哪个目标单元文件所需要
EOF

# 重新加载 systemd 配置,启用并启动服务,这里不再需要 sudo
systemctl --user daemon-reload
# 重新加载用户级别的 systemd 配置
systemctl --user enable "$SERVICE_NAME.service"
# 启用服务,使其在启动时自动运行
systemctl --user start "$SERVICE_NAME.service"
# 启动服务

然后写一个start.sh ,紫色得是代码,别的都是注释,前四条代码全是开发板添加的环境变量,开发板有几条环境变量就添加几条

环境变量

export CUDA_HOME=/usr/local/cuda-11.4
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-11.4/bin:$PATH
export PATH="/home/jetson/anaconda3/bin:$PATH"

#这行的意思就是切换到你代码程序目录下
cd /home/jetson/hanjiejianguanjiqiren/hhhh

#这行代码就是虚拟环境的路径+项目的运行文件的绝对路径  jetson是我的环境名
/home/jetson/.conda/envs/jetson/bin/python /home/jetson/hanjiejianguanjiqiren/hhhh/hanjiejianguan_main.py

服务的命令

systemctl status <service-name>:查询服务的状态信息,包括是否正在运行、最近一次启动时间、进程 ID 等。
systemctl start <service-name>:启动服务。
systemctl stop <service-name>:停止服务。
systemctl restart <service-name>:重启服务。
systemctl enable <service-name>:设置服务开机自启。
systemctl disable <service-name>:关闭服务开机自启。

hanjiejianguanjiqiren.service就是这块的名字(随便起,基本就是项目名)

这条命令查看服务状态(无权限的代码)

systemctl --user status hanjiejianguanjiqiren.service

有权限的命令

sudo systemctl --user status hanjiejianguanjiqiren.service

成功的大概样子

完事重启板子,板子就会自启程序了


 

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以通过以下步骤实现Jetson Nano开机自启动Python脚本: 1. 编Python脚本并保存在Jetson Nano上的任意位置。 2. 打开终端并输入以下命令: ``` sudo nano /etc/rc.local ``` 3. 在打开的文件中,找到“exit ”并在其上方添加以下代码: ``` sudo python3 /path/to/your/python/script.py & ``` 其中,“/path/to/your/python/script.py”应替换为您Python脚本的实际路径。 4. 保存并关闭文件,然后重新启动Jetson Nano即可。 这样,您的Python脚本将在Jetson Nano开机时自动启动。 ### 回答2: Jetson Nano是一款强大的嵌入式计算机,可以运行基于Linux的操作系统,例如Ubuntu。有时候,我们需要确保Jetson Nano在开机后自动运行Python脚本,以便在不需要人为干预的情况下启动我们的应用程序。本文将介绍如何设置Jetson Nano实现开机自动启动Python代码。 1.创建Python脚本。 在Jetson Nano上创建一个Python脚本,确保它可在Terminal中运行。在此示例中,我们将创建一个名为“test.py”的简单Python脚本。我们可以使用nano编辑器将以下代码复制到“test.py”中。 #!/usr/bin/env python import time print "Hello, World!" time.sleep(10) print "Goodbye, World!" 保存退出后,可以通过在终端中运行以下命令来测试脚本: $ python test.py 如果能看到“Hello, World!”和“Goodbye, World!”打印,则脚本在Jetson Nano上运行良好。 2.创建systemd单元 在Jetson Nano上,运行系统服务的主要方法是systemd。我们需要创建一个systemd单元,以在开机后自动运行Python脚本。在终端中运行以下命令,创建一个名为“test.service”的文件: $ sudo nano /etc/systemd/system/test.service 将以下代码复制并粘贴到文件中: [Unit] Description=Test service [Service] Type=simple # Change the path to our script # Some scripts require the PYTHONPATH to be set #Environment=PYTHONPATH=/home/nvidia/my_python ExecStart=/usr/bin/python /home/nvidia/test.py Restart=on-failure [Install] WantedBy=multi-user.target 这个文件包含了systemd单元的各个部分。在上面,我们指定单元的描述,执行Python脚本的命令(包括路径),以及指定单元应在失败时重新启动。保存并退出。 3.启用systemd 单元 在终端中运行以下命令, $ sudo systemctl daemon-reload $ sudo systemctl enable test.service 这将重新加载systemd管理的unit文件,并启用新创建的“test.service”。确保输出没有错误消息。 现在,当你启动Jetson Nano时,你将会看到“Hello, World!”和“Goodbye, World!”消息被打印出来,这表示Python脚本正在运行。 Jetson Nano是一个极为有用的开发板,它可以方便地实现开机启动Python脚本,从而加速应用程序开发和测试流程。我们刚刚介绍了如何创建一个Python脚本,并将其配置为在Jetson Nano上自动运行。通过设置systemd单元,我们还为我们的应用程序提供了自动重启的功能,确保它们始终运行在最佳状态。 ### 回答3: Jetson Nano是一款强大的嵌入式系统,广泛应用于人工智能和边缘计算。在Jetson Nano上实现py的开机自启动需要进行如下的步骤。 步骤一:编py脚本 首先,需要编一个py脚本,例如test.py,用于实现自启动的程序逻辑。该脚本可以通过Jetson Nano的终端或者任何编辑器创建和编辑。 步骤二:创建启动脚本 在Ubuntu中,可以创建一个启动脚本,该脚本包含在系统启动时需要运行的命令。例如: sudo nano /etc/init.d/myStartupScript.sh 然后,将以下代码复制到myStartupScript.sh中: #!/bin/bash python /path/to/test.py & 重要的事情说三遍:这里的“/path/to/test.py”需要替换为您实际py脚本的完整路径。 步骤三:设置启动脚本权限和可执行性 运行以下命令以更改myStartupScript.sh的权限和可执行性: sudo chmod 755 /etc/init.d/myStartupScript.sh sudo update-rc.d myStartupScript.sh defaults 现在,myStartupScript.sh脚本已被添加到系统启动过程中。 最后,重新启动Jetson Nano并确认test.py是否已在系统启动时自动运行。 总之,Jetson Nano开机自启动py是一个简单而方便的步骤,需要我们思考、编、调研、创建和测试。操作起来并不难,但是需要仔细完善每一个步骤,确保运行效果稳定可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值