当前位置: 首页 > news >正文

开机自启rc.local

1  rc-local.service

ls /lib/systemd/system | grep rc

sudo vim /lib/systemd/system/rc-local.service

打开之后:

一般正常的启动文件主要分成三部分

  • [Unit] 段: 启动顺序与依赖关系
  • [Service] 段: 启动行为, 如何启动,启动类型
  • [Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动

/etc/rc.local 在网络启动之后启动,加上 [Install] 段:

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

[Service]

2 新建并修改 rc.local 文件

sudo vim /etc/rc.local

脚本内容为:

#!/bin/sh

echo "自启动成功" > /usr/local/test.log

supervisord -c /etc/supervisor/supervisord.conf              #supervisord开机启动

/etc/init.d/mysqld start                    # mysql开机启动


exit 0

PS:#!/bin/sh 这一行一定要加上!

PS: 如果在 /etc/rc.local 中添加的是 ./test.sh 这种类型的,要在末尾加上 &,不然重启 ubuntu 的时候会卡在启动界面进不去系统。加上 & 是让脚本启动后在后台运行的作用

PS:  你的命令,不要有死循环或无法退出的程序,不然进不了系统

如果脚本内的cmd需要sudo权限执行,则命令格式为

echo 'passward' |sudo -S cmd

3 执行权限rc.local

sudo chmod +x  /etc/rc.local

4 建立软连接

ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/

设置权限

sudo chown root:root /etc/systemd/system/rc-local.service

sudo chmod 644 /etc/systemd/system/rc-local.service

systemd 默认从目录 /etc/systemd/system 读取配置文件。但是,里面存放的大部分文件都是符号链接,真正的配置文件存放 /lib/systemd/system

注意:systemd要求软链接必须与目标名称相同如果不同执行systemctl enable xxx时将报Failed to enable unit: File xxx.service: Link has been severed错误

服务配置文件将保持在原始位置,而软链接将位于/etc/systemd/system目录下,使systemd能够找到并管理该服务。这样做的好处是,当需要修改或更新服务配置文件时,只需在原始位置进行操作,而不需要修改软链接。

注意:如果用软链接配置,disable服务时,会将/etc/systemd/system下的.service软链接删除;但是如果是普通文件方式,disable服务时,不会将/etc/systemd/system下的.service文件删除

5 开启服务

启动服务查看启动状态

sudo systemctl start rc-local.service 

(sudo systemctl daemon-reload)

sudo systemctl status rc-local.service

使能开机自启动:

sudo systemctl enable rc-local.service

解释 rc-local.service

[Unit]

Description=/etc/rc.local Compatibility

Documentation=man:systemd-rc-local-generator(8)

ConditionFileIsExecutable=/etc/rc.local

After=network.target

[Service]

Type=forking       #子进程方式启动, 后台运行的形式

ExecStart=/etc/rc.local start   #服务具体运行命令

#ExecReload     #服务重启命令

#ExecStop        #服务停止命令

#Restart=always

#RestartSec=3

TimeoutSec=0

RemainAfterExit=yes

GuessMainPID=no

[install]

WantedBy=multi-user.target

Alias=rc-local.service      #服务别名

[Unit]

·  - `Description`:用于设置服务的描述信息。

  • - `Requires`:用于指定服务所依赖的其他服务。
  • - `After`:用于指定服务启动的顺序,可以设置在哪些服务之后启动。
  • - `Before`:用于指定服务启动的顺序,可以设置在哪些服务之前启动。

[Service]

·  - `Type`:定义服务单元的启动类型和运行状态

   1.simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。

2. forking::标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护进程的子进程。(以 fork 方式从父进程创建子进程,创建后父进程会立即退出)

3. oneshot: systemd中的Type=oneshot服务描述了这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。

4. dbus: 这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。

5. notify:这个程序在启动完成后会通过 sd_notify 发送一个通知消息。所以还需要配合 NotifyAccess 来让 Systemd 接收消息,后者有三个级别:none,所有消息都忽略掉; main,只接受我们程序的主进程发过去的消息; all,我们程序的所有进程发过去的消息都算。NotifyAccess 要是不写的话默认是 main。(当前服务启动完毕,会通知Systemd,再继续往下执行)

6. idle

·  - `ExecStart`:用于指定服务的启动命令。

ExecStartPre: 启动当前服务之前执行的命令

ExecStartPost:启动当前服务之后执行的命令

ExecReload:重启当前服务时执行的命令

ExecStop:停止当前服务时执行的命令

ExecStopPost:停止当其服务之后执行的命令

RestartSec自动重启当前服务间隔的秒数

Restart定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

no(默认值):退出后不会重启;

always:不管是什么退出原因,总是重启;

on-success:只有正常退出时(退出状态码为0),才会重启;

on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;

on-abnormal:只有被信号终止和超时,才会重启;

on-abort:只有在收到没有捕捉到的信号终止时,才会重启;

on-watchdog:超时退出,才会重启,如ssh服务设置为on-failure,表示任何意外的失败,就将重启sshd。如果sshd正常停止(比如执行systemctl stop命令),它就不会重启。

TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数

RemainAfterExit:值为yes或no,表示进程退出以后,服务仍然保持执行。这样的话,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行。通常和type=oneshot配合使用

·  - `WorkingDirectory`:用于指定服务的工作目录。进程工作目录,也就是说在执行前会先切换到这个目录

·  - `Environment`:用于设置服务的环境变量。

·  - `User`:用于指定服务运行的用户。

·  - `Group`:用于指定服务运行的用户组。

[install]

·  - WantedBy用于指定服务所属的启动级别(target)

poweroff.target:系统关机时的目标单元。

rescue.target:用于系统救援的目标单元,提供了一个最小的功能集合,用于修复系统问题。

multi-user.target:多用户模式的目标单元,用于正常的多用户操作。

graphical.target:图形界面模式的目标单元,用于启动图形界面环境。

reboot.target:系统重启时的目标单元。

- `RequiredBy`:用于指定哪些目标(target)依赖于该服务。

- Alias:当前 Unit 可用于启动的别名

- Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

更多服务相关知识网络搜索: ubuntu 自启动service

命令

systemctl start 服务名

 开启服务

systemctl stop 服务名

关闭服务

systemctl status 服务名

查看这个服务的状态

systemctl restart  服务名

重启服务

systemctl enable 服务名

使能开机启动服务

systemctl disable 服务名

禁止开机启动服务

systemctl list-units 服务名

查看当前服务

systemctl list-units

查看系统中所有正在运行的服务

 systemctl list-units --type=service

 查看所有已启动的服务

systemctl list-unit-files

查看系统中所有服务的开机启动状态

systemctl list-unit-files 服务名

查看当前服务的开机启动状态

systemctl list-dependencies 服务名

查看系统中服务的依赖关系

systemctl mask 服务名

冻结服务

systemctl unmask 服务名

解冻服务

systemctl daemon-reload

更新服务

systemctl restart 服务名

重启服务

systemctl is-enabled 服务名

 验证是否为开机启动

systemctl set-default multi-user.target

开机时不启动图形界面

systemctl set-default graphical.target

开机时启动图形界面

systemctl status rc-local.service

服务状态的含义

状态            含义

active(running) 表示程序正在执行

atcive(exited)    执行一次就正常退出的服务,不在系统中执行任何程序

active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行

inactive (dead) 未启动状态

状态 含义

inactive 服务关闭

disable 服务开机不启动

enabled 服务开机启动

static 服务开机启动项被管理

failed 服务配置错误

相关文章:

  • ctr查看镜像
  • 需求文档不完整,如何确保开发理解一致?
  • STM32八股【9】-----volatile关键字
  • 学习!FastAPI
  • ubuntu安装vmware启动虚拟机失败
  • 计算机组成与体系结构:缓存一致性(Cache Coherence)
  • 第四章:WebSocket 通信机制全解与客户端发包实录
  • BOM知识点
  • 线程池学习笔记
  • Linux系统编程——system函数和popen函数的使用方法以及区别
  • 三维重建(二十三)——各种参数的测试(废案)
  • IIS入门指南:原理、部署与实战
  • 容器化:用于机器学习的 Docker 和 Kubernetes
  • SRIO(Serial RapidIO)握手流程
  • 算符优先分析之输入串分析
  • 【深度学习】残差网络(ResNet)
  • python学习day29
  • Neovim 如何安装和配置缩进标识插件 indent-blankline.nvim
  • 贝塞尔曲线原理
  • Manus vs Lovart:AI Agent技术深度解析与实战指南
  • 肖钢:一季度证券业金融科技投资强度在金融各子行业中居首
  • 从《缶翁的世界》开始,看吴昌硕等湖州籍书画家对海派的影响
  • 私家车跑“顺风”出事故,意外险赔不赔?
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长