systemctl 添加开机启动服务
- 首先创建一个针对于某个应用的开启启动服务
- 然后在服务文件中配置 start/stop/restart/的对应脚本
- 将服务程序和脚本文件放到响应的位置
- 开启开机自启服务,关闭或者暂停服务
下面以编写一个开机自启动的ROS launch文件为例
step1 创建 服务 ros_startup.service
mkdir scripts
touch ros_startup.service
## ros_startup.servicede的内容
[Unit]
Description=powerOn startup ros
[Service]
Type=simple
Restart=always
RestartSec=30
ExecStart=/usr/sbin/ros_start
ExecStop=/usr/sbin/ros_stop
ExecRestart=/usr/sbin/ros_restart
[Install]
WantedBy=multi-user.target
## Unit 服务的描述
## Service是最关键的部分
## Type =simple 启动程序后,常驻内存中(区别于oneShut)
## 30s后会自动重启
## 后面指定服务的启动、结束、重启的脚本
## Install:需要将该unit安装到哪个target上
step2 创建 服务启动、结束脚本
##ros_start
#!/bin/bash
source /opt/ros/kinetic/setup.bash
source /home/nvidia/catkin_ws/devel/setup.bash
roslaunch ydlidar lidar.launch
exit 0
----------
##ros_stop
#!/bin/bash
source /opt/ros/kinetic/setup.bash
source /home/nvidia/catkin_ws/devel/setup.bash
for i in $(rosnode list);do
rosnode kill $i;
done
killall roslaunch
exit 0
----------
## ros_restart
/usr/sbin/ros_stop
sleep 3
/usr/sbin/ros_start
exit 0
step3 将脚本和服务放到合适的位置
## 为了方便省事,也可以将其放到一个脚本文件中
## Install_service.sh
sudo cp ros_start /usr/sbin/
sudo cp ros_stop /usr/sbin/
sudo cp ros_restart /usr/sbin/
sudo cp ros_startup.service /lib/systemd/system/
sudo systemctl enable ros_startup.service
exit 0
step4 查看、启动和暂停 开机自启服务
- systemctl is-enabled ros_startup.service 查看服务是否已经启动
- sudo systemctl stop ros_startup.service 暂停服务(下次重启后还会继续自启动)
- sudo systemctl start ros_startup.service 开始服务
- sudo systemctl disable ros_startup.service 失能服务(重启后,不会自启动了)
- sudo systemctl enable ros_startup.service 使能服务
- sudo journalctl –unit ros_startup.service 查看服务日志
step5 删除自启动服务
## 如果不想再使用这个开机自启服务,可以创建一个脚本文件删除它
## uninstall_ros_service.sh 跟Install_service.sh相对应
#!/bin/bash
/usr/sbin/ros_stop
sudo systemctl disable ros_startup.service
sudo rm /usr/sbin/ros_start
sudo rm /usr/sbin/ros_stop
sudo rm /usr/sbin/ros_restart
sudo rm /lib/systemd/system/ros_startup.service
exit 0
supervisor
Supervisor: A Process Control System
Supervisord是一个守护进程的工具,当进程意外终止或服务器掉电起来后,希望进程能够自动运行,supervisord可以很好的为我们做这件事情。同时supervisord也自带监控界面,可以通过浏览器灵活的查看、操作。
supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。
安装supervisor
sudo apt-get install supervisor
配置 supervisor
##/etc/supervisor
## 有 supervisord.conf配置文件 和 conf.d 文件夹目录
## 文件结尾有
[include]
files = /etc/supervisor/conf.d/*.conf
## 所以要想用supervisor管理自己的应用程序,只需要在conf.d文件夹中增添配置文件即可
这里以想让系统自启动几个 Python程序为例
这里写代码片
开启 关闭supervisor的服务
- supervisord -c supervisor.conf 通过配置文件启动supervisor
- supervisorctl -c supervisor.conf status 查看状态
- supervisorctl -c supervisor.conf reload 重新载入配置文件
- supervisorctl -c supervisor.conf start [all]|[x] 启动所有/指定的程序进程
- supervisorctl -c supervisor.conf stop [all]|[x] 关闭所有/指定的程序进程
- sudo supervisorctl start program-name