ubuntu 20.04 supervisor开机自启动ros2 节点

第一种方式 (systemctl)

系统:ubuntu20.04

ros2版本:foxy

第一步:添加服务脚本,如下,添加了[Install]下面两句,使用者为多用户

$ sudo vi /etc/systemd/system/rc-local.service 

[Unit]
Description=/etc/rc.local Compatibility 
ConditionPathExists=/etc/rc.local 

[Service]
Type=forking 
ExecStart=/etc/rc.local start 
TimeoutSec=0 
StandardOutput=tty 
RemainAfterExit=yes 
SysVStartPriority=99 

[Install]
WantedBy=multi-user.target

第二步:编写启动脚本 

上面的ExecStart=/etc/rc.local start 语句会执行在/etc/下面的rc.local文件,但是这个文件在这个目录下面没有,所以新建rc.local文件 

sudo touch /etc/rc.local 

注意,编写完成之后,记得给文件赋予权限

sudo chmod 777  /etc/rc.local 

添加一下内容,注意 #! /bin/bash 的作用位启动一个终端,会以bash形式执行文件。这里会在后台执行/home/jc/test.sh 的业务脚本

#! /bin/bash
## rc.local

bash /home/jc/test.sh &

第三步:编写业务脚本 

根据上面的启动脚本在指定的/home/jc下面编写业务脚本

sudo touch /home/jc/test.sh

内容如下,echo 是我测试用的输出。source 配置环境变量,然后执行launch 文件

#! /bin/bash
echo "ni hao" >> /home/jc/jjj

export ROS_LOG_DIR=/home/jc/ros2_ws/log
source /opt/ros/foxy/setup.sh
source /home/jc/ros2_ws/install/setup.bash

ros2 launch cpp_pubsub testTalk.launch.py

echo "nihao zaici nihao" >> /home/jc/jjj

注意,编写完成业务文件后要赋予执行权限

sudo chmod 777 /home/jc/test.sh 

 第四步:激活服务

 systemctl enable rc-local.service

第五步:启动服务 

systemctl start rc-local.service

第六步:重启系统

sudo reboot 

第七步:检查服务是否运行

 systemctl status rc-local

我用ros2的talker节点做的测试,效果如下

 注意:如果你要查看话题的发布情况,需要转到root用户下才能看到

sudo su 

如下图

 

 参考文件:(80条消息) ROS2开机程序自启动_持之以恒2016的博客-CSDN博客

(80条消息) linux+ros2 launch文件开机自启动_Zln4ever的博客-CSDN博客

第二种方式 (supervisor)

Supervisor(Supervisor: A Process Control System — Supervisor 4.2.4 documentation)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

第一步:安装supervisor

apt-get install supervisor

supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 

第二步:配置 

使用echo_supervisord_conf生成默认的配置文件 

echo_supervisord_conf > /etc/supervisor/supervisord.conf 

生成的配置文件如下

 supervisord.conf最后的[include]部分配置作用是,将conf.d/下所有.conf结尾的项目作为子进程启动,所以要添加子进程项目,在该目录下添加.conf结尾的项目即可

第三步:添加子进程.conf文件

在 /etc/supervisor/conf.d/文件夹下添加.conf文件

touch test.conf 

注意要赋予权限

chmod 777 test.conf 

内容如下,这里解释一下,program为启动的子进程的名字,之后需要启动子进程时套用。command为需要执行业务的脚本(最好写绝对目录)。stderr和stdout为执行子进程出错时的打印的日志的目录,stdout为执行子进行时正常打印的日志的目录。

还有其他的一些配置,参考:官网  或者其他人(82条消息) 使用 supervisor创建开机自启动进程_蜗牛撵大象的博客-CSDN博客

 第四步:编写业务脚本

在command对应的目录下生成业务脚本

touch startnode.sh

赋予权限

chmod 777 startnode.sh 

我的业务脚本内容如下 ,注意,source命令在业务脚本里面没有作用,如果你想自动获取有线网络或者无线网络的ip并配置到主从机中,最好将export 写在业务脚本中,不然不起作用。经过验证source .bashrc这个命令在业务脚本中不起作用

 注意,1.要实现开机自启动ros2的脚本,需要加入export ROS_LOG_DIR目录。

2.需要配置环境变量。起初我一位只要source 之前配置号的~/.bashrc文件就可以。但是,任然提示no such file or directory.最后我直接将环境变量配置在业务脚本中,如上 export LD_LIBRARY_PATH=.......

第五步:启动supervisor服务

 supervisord -c /etc/supervisor/supervisord.conf

第六步:启动子进行 (有问题查看stderr_logfile)

supervisorctl start test 

也可以执行执行,每次修改子进行文件或业务脚本文件,只要执行reload即可

supervisorctl reload

第七步:开机自启动supeivisor服务

7.1配置开机启动项

进入/lib/systemd/system目录,查看是否有supervisor.service文件,若没有创建supervisor.service文件(一般情况下都安装supervisor的时候已经自动创建好了),内容如下,system下的supervisor文件会在开机的时候自动执行,该文件执行时,会调用/etc/supervisor下的supervisord.conf.

 7.2设置开机启动

chmod 766 supervisor.service
systemctl enable supervisor.service
systemctl daemon-reload

关于supervisor的他的一些命令

2)、更新新的配置到supervisord    

supervisorctl update  

3)、重新启动配置中的所有程序

supervisorctl reload  

4)、启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name  

5)、查看正在守候的进程

supervisorctl  

6)、停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name  

7)、重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name  

8)、停止全部进程

supervisorctl stop all  

参考连接:(81条消息) ubuntu中supervisor的安装和学习_sueong的博客-CSDN博客_ubuntu 安装supervisor 

Subprocesses — Supervisor 4.2.4 documentation (supervisord.org)

 (82条消息) Ubuntu下Supervisor安装、配置和使用_weixin_34001430的博客-CSDN博客

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值