systemd系列——开机自启动篇

这篇具有很好参考价值的文章主要介绍了systemd系列——开机自启动篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用的开机自启方式

 1. .desktop开机自启动

        XDG Autostart 规范定义了一种在桌面环境启动和可移动介质安装时自动启动desktop 的方法,该方法就是将它们放在特定的Directories中。所以对于有界面的程序的自启动,可以利用linuxdesktop文件来实现,通过将创建好的desktop文件复制到~/.config/autostart目录下,实现有界面程序的自启动。

注意:

        特定于用户的:$XDG_CONFIG_HOME/autostart~/.config/autostart默认情况下

        全系统:$XDG_CONFIG_DIRS/autostart/etc/xdg/autostart默认情况下)

2. 为什么放在目录下就可以生效?

        1. 并不是放在目录下就一定会生效,会话管理器还会去读取desktop中autostart的字段

                X-GNOME-Autostart:true表示开机需要自启动,false应用程序将从列表中删除;

        2. X-GNOME-Autostart-Phase :控制应用程序的启动阶段(默认为“Applications”阶段

会话管理器将分5个阶段启动:
Initialization:底层的程序,需要很早运行起来的
WindowManager:包括窗口管理器和合成管理器,以及在映射任何窗口之前必须运行的任何其他内容
Panel:包括永久占用屏幕不动的任何内容
Desktop:包括在桌面上绘制的任何东西
Applications:是其他一切
  1. crontab命令
    1. 命令使用方式

                crontab [选项]

                选项:

                        -e: 编辑crontab定时任务

                        -l: 查询crontab任务

                        -r: 删除当前用户所有的crontab任务

systemd系列——开机自启动篇

  1. 实现方式        
    1. 输入crontab -e 命令

systemd系列——开机自启动篇

  1. 输入命令

@reboot /bin/bash/脚本路径和脚本名称

systemd系列——开机自启动篇

备注: 创建完的定时任务会存到/var/spool/cron/ 里面,这个目录下会有依据用户名产生登录表;

  1. systemd
    1. 为什么出现systemd?

systemd Linux 操作系统的系统和服务管理器,注意全部是小写,systemdinitSystemV的替代者。当作为启动时的第一个进程(作为 PID 1)运行时,它充当启动和维护用户空间服务的初始化系统。为登录用户启动单独的实例以启动他们的服务。

init/systemdV

systemd

启动时间

启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

更多的并行启动,意味着如果我们必须运行某些东西,我们不应该序列化它的启动(就像 sysvinit 那样),而是同时运行它,这样可用的 CPU 和磁盘 IO 带宽就会被最大化,并且因此,整体启动时间最小化。

启动脚本

启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

对服务本身进行管理;

少启动——启动较少的服务或者推迟启动,直到真正需要它们的时候,才启动。只要没有人想联系你的机器,就不需要运行它,只要它在第一次连接时启动。

例如,除非实际插入了蓝牙加密狗或应用程序想要与其 D-Bus 接口通信,否则不需要运行 bluetoothd

    1. systemd介绍

systemd是目前Linux系统上主要的系统守护进程管理工具,systemd所管理的所有系统资源都称作Unit,通过systemd命令集可以方便的对这些Unit进行管理。比如systemctlhostnamectltimedatectllocalctl等命令。

systemd 有一个最小的事务系统:如果一个单元被请求启动或关闭,它将把它和它的所有依赖项添加到一个临时事务中。然后,它会验证交易是否一致(即所有单元的排序是否无循环)。如果不是,systemd 将尝试修复它,并从事务中删除可能循环的非必要作业。此外,systemd 会尝试抑制事务中会停止正在运行的服务的非必要作业。最后检查事务的作业是否与已经排队的作业相矛盾,然后可选地中止事务。如果一切都解决了并且事务是一致的并且其影响最小化,它将与所有已经完成的作业合并并添加到运行队列中。

    1. systemd语法
  1. 常用命令集

systemd系列——开机自启动篇

命令名称

说明

systemctl

用于检查和控制各种系统服务和资源的状态;

journalctl

用于查看系统日志和各类应用服务日志;

systemd-notify

Systemd 的内部工具,用于通知服务的状态变化;

systemd-analyze

显示此次系统启动时运行每个服务所消耗的时间,可以用于分析系统启动过程中的性能瓶颈;

systemd-cgls

递归地显示指定 CGroup 的继承链;

systemd-cgtop

显示系统当前最耗资源的 CGroup 单元;

loginctl

用于管理系统已登录用户和 Session 的信息;

systemd-nspawn

用于创建 Systemd 容器;

  1. 常用命令

命令

说明

$ systemctl --version

查看systemd的版本

$ systemctl status

显示系统状态

$ sysystemctl status 服务名.service

查看某个服务的状态

$ sudo systemctl start 服务名.service

启动某个服务 注意是root权限

$ sudo systemctl stop 服务名.service

停止某个服务

$ sudo systemctl restart 服务名.service

重启某个服务

systemctl daemon-reload

重新加载服务的配置文件

    1. systemd配置文件

systemd中这些资源分别代表着不同的单元(Unit)。systemd 总共有 11 种不同类型的“单元”。单元封装了与系统启动和维护相关的各种对象。systemd通过这些Unit的配置文件,知道怎么启动这些Unit

提供以下单位类型:

1.服务单元(systemd.service):启动和控制守护进程及其组成的进程。

2.套接字单元(systemd.socket):它封装了系统中的本地 IPC 或网络套接字,对于基于套接字的激活很有用。

3.目标单元(systemd.target):可用于对单元进行分组,或在启动期间提供众所周知的同步点。

4.设备单元(systemd.device):在 systemd 中公开内核设备,并可用于实现基于设备的激活。

5.挂载单元(systemd.mount):控制文件系统中的挂载点。

6.自动挂载单元(systemd.automount):提供自动挂载功能,用于按需挂载文件系统以及并行启动。

7.定时器单元(systemd.timer):对于触发基于定时器的其他单元的激活很有用。

8.交换单元(systemd.swap):与挂载单元非常相似,封装了操作系统的内存交换分区或文件。

9.路径单元(systemd.path):当文件系统对象更改或修改时,路径单元可用于激活其他服务。

10.切片单元(systemd.slice):可用于将管理系统进程的单元(例如服务和范围单元)分组到分层树中,以用于资源管理。

11.范围单元(systemd.scope):类似于服务单元,但管理外部进程而不是启动它们。

单元文件是从编译期间确定的一组路径加载的,如右表中所述。在前面列出的目录中找到的单元文件会覆盖列表中较低目录中的同名文件。

一个.Service配置文件分为三部分:

Unit:定义该服务作为Unit角色时相关的属性

Service:定义本服务相关的属性

Install:定义本服务在设置服务开机自启动时相关的属性。换句话说,只有在创建/移除服务配置文件的软链接时,Install段才会派上用场。这一配置段不是必须的,当未配置[Install]时,设置开机自启动或禁止开机自启动的操作将无任何效果

systemd系列——开机自启动篇

命令

说明

systemctl enable 服务名.service

服务加入开机自启动

systemctl disable 服务名.service

从开机自启动中删除服务

systemctl is-enabled 服务名.service

查看是否设置了开机自启动

systemctl list-unit-files --type service | grep 'enabled'

查看所有开机自启动的服务

备注:

  • 每一个 Unit 都需要有一个配置文件用于告知 systemd 对于服务的管理方式;
  • 配置文件存放于 /usr/lib/systemd/system/,设置开机启动后会在 /etc/systemd/system 目录建立软链接文件;
  • 每个Unit的配置文件配置默认后缀名为.service;
  • /usr/lib/systemd/system/ 目录中分为 system user 两个目录,一般将开机不登陆就能运行的程序存在系统服务里,也就是 /usr/lib/systemd/system;
  • 配置文件使用方括号分成了多个部分,并且区分大小写;

unit文件官方文档

    1. systemd自启动原理

以下 图片来自于systemd时代的开机启动流程(GPT+systemd) - Systemd系列文章 侵删

如果要让任务开机自启动,需将对应的Unit文件存放于/etc/systemd/system下,下面是以service为例进行的流程介绍:

systemd系列——开机自启动篇

内核启动过程中流程图

内核引导结束流程图

当内核启动到内核空间中的根文件系统的时候,对于使用systemd的系统来说,这个时候就可以调用初始化文件中的systemd程序,其PID=1。从现在开始,systemd进程可以在此时做一些内核启动剩余的必要操作。

systemd系列——开机自启动篇

对于已经启动完成的正常系统来说,sysinit.target是用于做系统初始化的,basic.target则是系统初始化完成后执行的一些基本任务,比如启动所有定时器任务,开始监控指定文件等,算是系统启动过程中早期的开机自启动任务。文章来源地址https://www.toymoban.com/news/detail-473140.html

 

到了这里,关于systemd系列——开机自启动篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    systemd是Linux系统中现代化的初始化系统,可以使用它来实现开机自动运行命令。在systemd中,可以通过创建一个service文件,把要执行的命令放在其中,然后将其添加到systemd的自启动项中。 具体操作步骤如下: 首先在终端中使用sudo权限创建一个.service文件,用于存储service配置

    2024年02月08日
    浏览(76)
  • java项目(jar包)配置为开机自启 jar包bat脚本启动和配置为开机自启

    今天给大家分享一下,如何把java项目,打包--------打包后启动---------生成bat文件启动-----------设置为开机自启。 每一步都是先是文字描述,后面是图片展示。 首先是打包,咱们写好的项目在maven处 点击clear,等待完成后,点击package          打包完成后,在target目录下可以

    2024年02月09日
    浏览(43)
  • MySQL服务关闭开机自启,改成手动启动状态

    最近在写前端,所以就先把后端数据库禁用或手动启动吧。防止浪费太多内存或资源。一般就之前损坏了的数据库就禁用吧,其他最近不常用的服务就没必要开机自启动吧,毕竟电脑只有一台,不想学习想用电脑来玩的话就讲工作服务从开机自启动状态改成手动状态吧。 首先

    2024年02月09日
    浏览(51)
  • docker常用命令及设置开机自启

    1. 创建容器时设置: 2. 更新已有容器设置: –restart具体参数,详见官方文档说明 Policy Result no Do not automatically restart the container when it exits. This is the default. 默认设置,容器退出时不重启容器。 on-failure[:max-retries] Restart only if the container exits with a non-zero exit status. Optionally, limit th

    2024年02月11日
    浏览(40)
  • Linux环境中,通过systemd服务将Spring Boot Jar包设置为开机自启动

    1、进入/etc/systemd/system目录,并创建一个名为 spring-boot-app.service 的新服务文件。 2、将下面的配置内容复制到  spring-boot-app.service  文件中,并保存。 其中, username 是你要用来运行Spring Boot应用程序的用户名, /path/to/spring-boot-app.jar 是你的Spring Boot应用程序的路径。 3、重新加

    2024年02月06日
    浏览(82)
  • 专治疑难系列 - 解决win11中xbox开机自启问题

    ‍‍🏡博客主页:  Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『专治疑难系列』 🌌上期文章:  专治疑难系列 - 无法激活网络的解决方法 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!关注、点赞、收藏、评论。

    2023年04月20日
    浏览(46)
  • CentOS7设置nginx服务开机自启【开机自启】

    关机后,我们发现连接不上了 然后等待一会儿,结果出来了~ 在文件中添加以下行,这将在系统启动时执行启动NGINX的命令: 保存并关闭文件。 确保rc.local文件的所有者和组都是root:

    2024年02月09日
    浏览(47)
  • linux 服务开机自启

    Centos有两种方式,一是修改/etc/rc.local文件,二是使用chkconfig来管理开机自启(chkconfig无法自启动源码包) 等级 等级0:关机 等级1:单用户模式 等级2:无网络连接的多用户命令行模式 等级3:有网络连接的多用户命令行模式 等级4:不可用 等级5:带图形界面的多用户模式 等级

    2024年02月13日
    浏览(41)
  • C#程序开机自启

    第一种方式 修改注册表 第二种添加快捷方式到启动菜单中 添加引用,在 Com 中搜索 Windows Script Host Object Mod

    2024年02月03日
    浏览(47)
  • Elasticsearch开机自启

    系统: CentOs 在 /etc/systemd/system 下创建一个名为 elasticsearch.service 的文件 将一下配置粘贴进入 elasticsearch.service 文件 LimitNOFILE , LimitMEMLOCK 这两参数等同于我们设置的(必须添加) 保存 elasticsearch.service 后重新加载系统后台启动项 此时我们便可以通过 systemctl start elasticsearch 等

    2024年01月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包