最近着手导师分配的项目任务,对Linux有了一定基础的了解,项目其中有要求在Linux部署一个开机自启动服务。本文将以此为目的来探索如何实现开机自启动服务。

GNU/Linux实现开机自启动服务有两种方式:

SysVinit

systemd

SysVinit

SysVinit作为init进程执行/etc/init.d/中的脚本,这些脚本称为“服务”,每个run level所对应的目录/etc/rcX.d/都存放这指向/etc/init.d/的链接,其中X=0, 1, 2, 3, 4, 5, 6对应不同的运行级别,S比较特殊,init进程作为1号进程启动后,会在开始对应运行级别的服务之前开始/etc/rcS.d中的服务。

运行级别

关机

单用户模式

多用户模式(没有NFS)

多用户模式

保留

x window模式(图形界面)

重启

/etc/init.d中的服务样式如下:

#!/bin/bash

start() {

# 你要执行的程序或脚本

}

stop() {

...

}

# shell脚本中,$0表示自身shell脚本对于当前执行路径的相对名称

# 从$1开始表示接收的参数

# example:

# cd ~

# sh start.sh hello

# $0: start.sh

# $1: hello

switch $1 in

case

start)

start

;;

stop)

stop

;;

*)

...

esac

exit 0

这样的脚本,我们称之为服务(service)

基于SysVinit编写自启动流程

具体流程如下:

在/etc/init.d中创建服务脚本hello

#!/bin/bash

# service hello

start() {

echo 'start hello service...'

/bin/BootLoader

echo 'start hello service over'

}

stop() {

echo 'stop hello service...'

killall BootLoader

echo 'stop hello service over'

}

switch $1 in

case

start)

start

;;

stop)

stop

;;

restart)

stop

start

*)

echo "valid arg:[start|status|stop|restart]"

esac

exit 0

status 是自带的参数,用于查看服务状态

保存脚本后,通过sysv-rc-conf或chkconfig(Red Hat Linux)命令设置服务在什么运行等级开机启动

apt install定位不到sysv-rc-conf包解决方案:https://www.cnblogs.com/hester/p/12254562.html

通过service命令可以管理所写的服务:

service hello start // 启动nginx服务

service hello status // 查看服务运行状态

service hello stop // 关闭nginx服务

systemd

SysVinit 运行非常良好,概念简单清晰。它主要依赖于 Shell 脚本,这就决定了它的最大弱点:启动太慢。在很少重新启动的Server 上,这个缺点并不重要。而当 Linux 被应用到移动终端设备的时候,启动慢就成了一个大问题。

随着Linux的更新,sysvinit程序被systemd取代。

systemd的特点是可以让服务之间并行启动,加快Linux启动速度。(systemd不仅仅是管理开机,作为一号进程,它几乎什么都管)

systemd中的systemctl命令可以对服务进行管理。

systemd的服务保存于/etc/systemd/system中, 服务样式如下:

[Unit]

Description=This is a simple service

# 表示本服务在network.target启动后启动(如果networdk.target启动的话)

After=network.target

# 若依赖

Wants=sshd-keygen

# 强依赖

Requires=

[Service]

# simple指ExecStart启动的进程为主进程

Type=simple

ExecStart=...your program address

# 定义如何安装这个配置文件

[Install]

#

WantedBy=multi-user.target

[Unit]

[Unit] 用于描述服务以及指定该服务与其他服务启动的优先次序

[Service]

[Service]用于描述如何启动当前服务。

[Install]

[Install]定义如何安装这个配置文件,即怎样做到开机启动。

WantedBy字段:表示该服务所在的Target。

Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,该服务所在的Target是multi-user.target。

这个设置非常重要,因为执行systemctl enable hello.service命令时,hello.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

Systemd 有默认的启动 Target,通过如下命令获得:

$ systemctl get-default

修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。

重新加载配置文件

修改了配置文件需要重新加载一下配置文件:

sudo systemctl daemon-reload

重启相关服务

sudo systemctl restart foobar

来源:oschina

链接:https://my.oschina.net/StupidZhe/blog/4411429

linux sysvinit 机制,Linux基于SysVinit和systemd实现开机自启动服务相关推荐

  1. linux 设置开机自启动服务命令,linux开机自启动服务优化设置命令

    1.设置成英文字符,避免出现乱码 [root@xuegod62 ~]# LANG=en 2.两种配置linux开机自启动服务命令: 1) [root@xuegod62 ~]# ntsysv 2) [r ...

  2. linux实现开机自启动服务/脚本

    linux实现开机自启动服务或者开机自运行用户自定义脚本有三种方式 方式一: 执行 systemctl enable 服务名 命令,将对应服务的.service文件软链接到 /etc/systemd/ ...

  3. 【Linux】使用systemd设置开机自启动命令

    目录 1 使用使用systemd实现开机自动运行命令 1.1 新建一个.service文件 1.2 编写.service文件 1.2.1 [Unit] 1.2.2 [Service] 1.2.3 [I ...

  4. linux sysctl机制,Linux操作系统sysctl机制的思想与实现

    续<linux的netlink机制>:其实只要同时提供实现一个内核netlink的内核模块和一个定制用户策略的用户空间netlink程序,你就可以完全控制linux内核了,这里内核的net ...

  5. 如何在linux操作系统中安装oracle数据库,并设置开机自启动

    1. ping www.baidu.com 查看是否联网成功 2. 不能联网,就将ip修改为动态dhcp模式使之能链接成功. 3. Vi /etc/hosts 写上ip地址与主机名 4. yum in ...

  6. linux 设置开机自启动服务命令,linux 设置服务开机自启动

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 由于机房断电,导致服务关闭,在运维人员匆忙的情况下,可能就只重启了机器,很容易就忽视了里面的服务,而对于比较重要的 ...

  7. Ubuntu下看门狗程序以及基于.destop文件实现的开机自启动

    首先说一下Ubuntu下看门狗程序,这个程序是用在我项目中的,用来保证核心程序能够实现崩溃自启动,这对于程序的稳定运行至关重要. 话不多少,直接上代码: (1)新建看门狗程序 daemon_uploa ...

  8. linux rcu机制,Linux RCU机制详解 (透彻)

    一:前言 RCU机制出现的比较早,只是在linux kernel中一直到2.5版本的时候才被采用.关于RCU机制,这里就不做过多的介绍了,网上有很多有关RCU介绍和使用的文档.请自行查阅.本文主要是从 ...

  9. linux模块化机制,Linux模块化机制和module_init

    > 引子:模块化机制优点 模块化机制(module)是Linux系统的一大创新,是Linux驱动开发和运行的基础(当然,module并不仅仅是支撑驱动).其优点在于: 1.在系统运行动态加载模块 ...

  10. linux sysctl机制,Linux系统控制文件 /etc/sysctl.conf

    /etc/sysctl.conf这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件.这样或许你不理解,先看看我的系统/etc/sysctl.conf这个 ...

最新文章

  1. linux命令2--cd和pwd
  2. 皮一皮:所以说女生的好奇心不能太大...
  3. (3)数据库的建立和数据表的操作
  4. 瞬变电磁法的基本原理与TEM正演技术
  5. Acrobat XI安装教程
  6. PAT_B_1057_Java(20分)
  7. centos Ipython安装
  8. 鸿蒙os开发小程序,9岁小学生展示鸿蒙OS开发:这操作太秀了
  9. linux磁盘权限 /srv,Linux学习笔记之解压压缩,磁盘分区,软件包管理,权限
  10. Python3 中打的迭代器与生成器
  11. command -- 把动作封装成类
  12. linux使用samba实现文件共享
  13. div+css布局实现个人网页设计(HTML期末作业)
  14. autojs识别数字ocr
  15. 联想G480 i3 2348M扩展内存
  16. 9个最适合Elementor的免费主题【官方推荐】
  17. 《Web安全之深度学习实战》笔记:第六章 垃圾邮件识别
  18. 【FFMPEG】解决截取MP4视频的中间段时,截取完成后前几帧视频卡住,但是有声音的情况
  19. 编译原理实验二:赋值语句的语法分析程序设计
  20. 编译原理学习(二)--终结符和非终结符

热门文章

  1. python包管理工具pip_pip_python包管理工具(pip)下载 v9.0.1官方版 - 121下载站
  2. 分段路由_如何理解段路由(SPRING)?—Vecloud微云
  3. 盒型详解及不同浏览器兼容
  4. 解决 应用程序无法启动(0xc000007b),请单击确定关闭应用程序
  5. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
  6. 表单提交复选框(checkbox)注意事项
  7. C#一个方法返回多个值
  8. HTML5 css3 阴影效果
  9. 解决进入XP系统无法响应故障
  10. Asp.net中文件的上传和下载(视频教程)