JingMenBus/service.md
2025-08-29 11:25:10 +08:00

177 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开机自启动脚本配置操作流程
## 一、环境说明
- 操作系统Ubuntu 20.04
- 目标脚本can.sh、lidar128.sh、start.shpubJM.sh嵌套在start.sh中无需单独配置
- 启动顺序要求can.sh → lidar128.sh → start.sh
- 配置工具systemctlsystemd服务管理
## 二、准备工作
1. **确认脚本路径**
记录当前脚本所在的完整路径(`minibus`目录的绝对路径),示例:
`/home/nvidia/Downloads/minibus`
(若主机更换,只需替换`minibus`之前的可变路径部分)
2. **验证脚本可执行性**
确保所有脚本具有执行权限(若已配置可跳过):
```bash
cd /home/nvidia/Downloads/minibus # 替换为实际路径
chmod +x can.sh lidar128.sh start.sh pubJM.sh
```
## 三、创建 systemd 服务文件
1. 创建 can 服务can.service
```bash
sudo gedit /etc/systemd/system/can.service
```
粘贴以下内容注意修改ExecStart路径
```ini
[Unit]
Description=Configure CAN interface (can0)
After=network.target
Documentation=https://www.freedesktop.org/wiki/Software/systemd/
[Service]
Type=oneshot
# 替换为实际的can.sh路径
ExecStart=/home/nvidia/Downloads/minibus/can.sh
User=root # 必须root权限配置CAN接口和设备权限
RemainAfterExit=yes # 确保服务状态在执行后保持为active
[Install]
WantedBy=multi-user.target
```
2. 创建 lidar128 服务lidar128.service
```bash
sudo gedit /etc/systemd/system/lidar128.service
```
粘贴以下内容注意修改ExecStart路径
```ini
[Unit]
Description=Start lidar128 configuration and pcap replay
After=network.target
Documentation=https://www.freedesktop.org/wiki/Software/systemd/
[Service]
Type=simple # 因tcpreplay是持续运行的进程需用simple类型
# 替换为实际的lidar128.sh路径
ExecStart=/home/nvidia/Downloads/minibus/lidar128.sh
User=root # 需root权限配置网络接口和vlan
Restart=on-failure # 进程意外退出时自动重启
[Install]
WantedBy=multi-user.target
```
3. 创建 start 服务start.service
```bash
sudo gedit /etc/systemd/system/start.service
```
粘贴以下内容注意修改ExecStart路径和 User
```ini
[Unit]
Description=Start ROS2 nodes
After=can.service lidar128.service network.target
Requires=can.service lidar128.service
[Service]
Type=simple
User=nvidia
WorkingDirectory=/home/nvidia/Downloads/minibus
ExecStart=/home/nvidia/Downloads/minibus/start.sh
Restart=on-failure
Environment=RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# 如果需要ROS_DOMAIN_ID等环境变量也在这里加 Environment=
[Install]
WantedBy=multi-user.target
```
## 四、配置服务权限与生效
1. 设置服务文件权限
```bash
sudo chmod 644 /etc/systemd/system/can.service
sudo chmod 644 /etc/systemd/system/lidar128.service
sudo chmod 644 /etc/systemd/system/start.service
```
重新加载 systemd 配置
```bash
sudo systemctl daemon-reload
```
启用开机自启动
```bash
sudo systemctl enable can.service
sudo systemctl enable lidar128.service
sudo systemctl enable start.service
```
## 五、验证配置
1. 检查服务状态
```bash
sudo systemctl status can.service
sudo systemctl status lidar128.service
sudo systemctl status start.service
```
正常状态应为inactive未启动
2. 手动测试启动顺序
```bash
# 依次启动服务,验证依赖关系
sudo systemctl start can.service
sudo systemctl start lidar128.service
sudo systemctl start start.service
# 检查启动结果若有图形界面会看到多个gnome-terminal窗口弹出
```
3. 重启测试
```bash
sudo reboot
```
重启后验证脚本是否按顺序自动执行,可通过以下命令检查日志:
```bash
journalctl -u can.service -f # 查看can服务日志
journalctl -u lidar128.service -f # 查看lidar128服务日志
journalctl -u start.service -f # 查看start服务日志
```
## 六、注意事项
1. 路径变更处理
若主机更换导致minibus目录路径变化需重新修改 3 个服务文件中的ExecStart路径并执行
```bash
sudo systemctl daemon-reload
```
2. ROS2 环境依赖
确保start.sh和pubJM.sh中source install/setup.bash的路径正确相对于脚本所在目录否则 ROS2 节点无法启动。
3. 图形界面权限
若gnome-terminal无法启动可能是 X11 权限问题需确认start.service中XAUTHORITY的路径是否与当前用户匹配替换lyq为实际用户名
4. 服务类型说明
- can.service用oneshot一次性执行
- lidar128.service用simple持续运行 tcpreplay 进程)
- start.service用oneshot启动所有节点后完成