Ubuntu开机启动roscore服务的设置
1、在/etc/init.d中添加启停脚本ros_daemon.bash:
#!/bin/bash ### BEGIN INIT INFO
# Provides: ros_daemon.bash
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO script_name=$(basename $0)
result_log=/var/log/${script_name}".log" log_with_time() {
local now_time=$(date +%Y/%m/%d-%H:%M:%S)
echo "$now_time: $*" >>$result_log
} do_start() {
source /opt/ros/indigo/setup.bash >>$result_log 2>&1
/opt/ros/indigo/bin/roscore >>$result_log 2>&1 &
} do_stop() {
kill $(pgrep roscore) >>$result_log 2>&1
} log_with_time "[BEGIN] $0 $*." case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
do_start
;;
*)
log_with_time "Wrong parameter: $*."
;;
esac log_with_time "[END] $0 $*."
exit 0
2、Ubuntu自启服务的设置:
1、删除自启动服务:
sudo update-rc.d ros_daemon.bash remove
如果/etc/init.d/ros_daemon.bash仍然存在,那么需要添加-f选项。
sudo update-rc.d -f ros_daemon.bash remove
【注意】
上述命令删除的都仅仅是链接,而不会删除/etc/init.d/文件夹中的脚本文件。
2、添加开机自启动服务:
update-rc.d ros_daemon.bash defaults 90 10
表示开机时第90个启动,关机时第10个关闭;

上面的命令和下面显式的指定启动级别是一样的:
update-rc.d ros_daemon.bash start 90 2 3 4 5 . stop 10 0 1 6 .
其中,2345和016表示运行级别,如下:

我们可以通过runlevel查看当前系统的运行状态:

【提示】
1、使用-n选项,如sudo update-rc.d -n ros_daemon.bash remove 可以模拟该命令的输出,但是并不实际执行;
2、man update-rc.d 可以查看详细手册;
3、sudo service --status-all可以查看当前注册的所有服务列表。
3、python roscore和rosout、python rosmaster的关系:
roscore是rosout、python rosmaster的父进程。
3.1 如果1、步骤,在脚本中使用roscore &
开机执行开机脚本S*ros_daemon.bash start;调用结束后脚本退出,那么roscore成为孤儿进程(被init收养),rosout、python rosmaster仍然是roscore的子进程。

日志中的表现是:
开机脚本日志S*ros_daemon.bash.log中有BEGIN和END语句,但是开机过程中没有roscore的输出日志;直到关机时,roscore被关机脚本kill $(pgrep roscore)关闭,roscore的输出写入S*ros_daemon.bash.log;即日志中的记录顺序与脚本的执行顺序不一致了;
关机脚本日志K*ros_daemon.bash.log中有BEGIN和END语句,正常。
3.2、如果1、步骤中,使用的是roscore不带&
那么该脚本(父进程ros_daemon.bash start)不会退出,直到关机时系统执行:
1、关掉该父进程(子进程roscore也被关闭,且roscore下面的语句不再执行);
2、执行ros_daemon.bash stop,会报错:已经没有roscore了。
日志中的表现是:
S*ros_daemon.bash.log中没有END语句;
K*ros_daemon.bash.log中有错误日志:已经没有roscore了。
【参考】
1、https://stackoverflow.com/questions/24258698/missing-lsb-information-start-up-shell-script
2、http://www.cnblogs.com/hbhzsysutengfei/p/ubuntu-runlevel-autostart-service.html
Ubuntu开机启动roscore服务的设置的更多相关文章
- Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启动程序/服务)
注意:rc.local脚本里面启动的用户默认为root权限. 一.rc.local脚本 rc.local脚本是一个Ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令.该脚本位于/et ...
- Centos7 设置Mongodb开机启动-自定义服务
(1).在/lib/systemd/system/目录下新建mongodb.service文件,内容如下 [Unit] Description=mongodb After=network.target ...
- Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动
Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动 >>>>>>>>>>>>>> ...
- MTK(android init.rc) 写一个开机启动的服务
在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的. 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(androi ...
- ubuntu18.04 开机启动/停止服务
ubuntu18.04 开机启动/停止服务 一.删除一个服务 如果要删除一个服务,使用uodate-rc.d(参数-f是强制删除符号链接) update-rc.d -f apache2 remove ...
- 开启win10下Ubuntu子系统的SSH服务 并设置为开机启动
Win10中安装Ubuntu子系统后默认是没有开启SSH服务的,需要手动配置开启, 1.先通过 bash 进入子系统修改配置 vi /etc/ssh/sshd_config 备注 输入i 表示键入, ...
- CentOS设置程序开机启动程序/服务的方法(转)
注意:CentOS 6下基本没什么问题,CentOS 7估计不一定能行. 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.loca ...
- Centos7查询开机启动项服务
问题描述: 最近安装了zabbix设置了一些开机启动服务 例如:zabbix-server.service,httpd.service,mariadb.service,或者系统的firework.se ...
- Redis之Ubuntu开机启动
1.编译源码,生成可执行文件: 2.将生成的可执行文件拷贝到 /user/local/bin目录下,若没有x权限请加上: 3.将安装包中的 redis.conf配置文件移到/etc/redis.con ...
随机推荐
- Django Form表单组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- java的lamda表达式
Java8才支持lamda表达式 lamda是一中函数式编程语言 通过实现模式是匿名内部类 java使用内部类实现接口 首先定义一个接口 @FunctionalInterfaceinterface ...
- netty初试
netty官网:点击进入 学习netty之实现一个丢弃服务器 环境: JDK1.8 netty5.0+ 步骤: 实现一个丢弃服务器 实现一个客户端发送数据 丢弃服务器的创建 //用于接受客户端的的连接 ...
- Bigger-Mai 养成计划,subprocess模块
subprocess模块是python从2.4版本开始引入的模块.主要用来取代 一些旧的模块方法,如os.system.os.spawn*.os.popen*.commands.*等.subproce ...
- mongodb修改和删除操作
修改数据修改里面还有查询条件.你要该谁,要告诉 mongo.查找名字叫做小明的,把年龄更改为 16 岁:1 db.student.update({"name":"小明&q ...
- centos7.5升级openssh7.4到7.9
漏洞扫描工具扫描出openssh用户枚举漏洞,搜索资料得知无补丁和升级包,解决这个漏洞得安装漏洞修复之后的版本version>7.8. 环境 linux版本: CentOS Linux rele ...
- bootstrap table 分页序号递增问题 (转)
原文地址:https://segmentfault.com/q/1010000011040346 如题,怎么在bootstrap table中显示序号,序号递增,并且分页有效,等于是每页10条,第2页 ...
- HDU 5616 Jam's balance(Jam的天平)
HDU 5616 Jam's balance(Jam的天平) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)
1.问题 在微信浏览器中,需要时刷新当前页面. 正常情况下我们直接使用 location.reload 方法来刷新. 2.解决方法 function realod(){ var {search,hre ...
- mysql自增长主键,删除数据后,将主键顺序重新排序
用数据库的时候,难免会删除数据,会发现设置的主键增长不是按照正常顺序排列,中间有断隔比如这样. 以我这个情况举例 处理方法的原理:删除原有的自增ID,重新建立新的自增ID. ALTER TABLE ` ...