Linux配置开机自启动的多种方式小节

文章目录

    • /etc/rc.local
    • systemctl 添加开机启动服务
    • supervisor

Linux 守护进程的启动方法
Systemd 入门教程 命令
Systemd 入门教程:实战篇

/etc/rc.local

  • 将启动命令直接放到这个文件中
    https://blog.csdn.net/u013401853/article/details/71079595

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程序为例

cd /etc/supervisor/conf.d/
recive_hex_data_and_save_inDB.conf  recive_json_data_from_server.conf
//文件内容
[program:recive_hex_data_and_save_inDB]
directory = /var/lib/cloud9/BBB
command = /usr/bin/python recive_hex_data_and_save_inDB.py
priority=1
numprocs=1
autostart=true
autorestart=true

开启 关闭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

你可能感兴趣的:(Linux学习)