zoukankan      html  css  js  c++  java
  • systemctl简单 .md

    systemctl 简单 备忘

    详细介绍https://wiki.archlinux.org/index.php/systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

    编写单元文件

    systemd 单元文件的语法来源于 XDG 桌面项配置文件.desktop文件,最初的源头则是Microsoft Windows的.ini文件。单元文件可以从多个地方加载,systemctl show --property=UnitPath 可以按优先级从低到高显示加载目录:

    • /usr/lib/systemd/system/ :软件包安装的单元
    • /etc/systemd/system/ :系统管理员安装的单元

    注意:

    • systemd 运行在用户模式下时,使用的加载路径是完全不同的。
    • systemd 单元名仅能包含 ASCII 字符,下划线和点号和有特殊意义的字符('@', '-')。其它字符需要用 C-style "\x2d" 替换。

    提示:# 开头的注释可能也能用在 unit-files 中,但是只能在新行中使用。不要在 systemd 的参数后面使用行末注释, 否则 unit 将会启动失败。

    处理依赖关系

    [unit]
    Requires=B
    After=B
    

    服务类型

    [Service]
    Type=simple | forking | oneshot | notify | dbus | idle
    

    附加配置片段

    要附加配置片段,先创建名为 /etc/systemd/system/<单元名>.d/ 的目录,然后放入 *.conf 文件,其中可以添加或重置参数。这里设置的参数优先级高于原来的单元文件。下面的更新方式比较简单:

    # systemctl edit unit
    

    这将会在编辑器中打开文件 /etc/systemd/system/*unit*.d/override.conf,编辑完成之后自动加载。

    Note: 并不是所有参数都会被子配置文件覆盖。例如要修改 Conflicts= 就必须 替换原始文件

    目标(target)

    运行级别(runlevel)是一个旧的概念。现在,systemd 引入了一个和运行级别功能相似又不同的概念——目标(target)。不像数字表示的启动级别,每个目标都有名字和独特的功能,并且能同时启用多个。一些目标继承其他目标的服务,并启动新服务。systemd 提供了一些模仿 sysvinit 运行级别的目标,仍可以使用旧的 telinit 运行级别 命令切换。

    工作原理

    从systemd 226版本开始,/etc/pam.d/system-login默认配置中的pam_systemd模块会在用户首次登陆的时候, 自动运行一个 systemd --user 实例。 只要用户还有会话存在,这个进程就不会退出;用户所有会话退出时,进程将会被销毁。当 #随系统自动启动systemd用户实例 启用时, 这个用户实例将在系统启动时加载,并且不会被销毁。systemd用户实例负责管理用户服务,用户服务可以使用systemd提供的各种便捷机制来运行守护进程或自动化任务,如socket激活、定时器、依赖体系以及通过cgroup限制进程等。

    和系统单元类似,用户单元可以在以下目录找到(按优先级从低到高排序):

    • /usr/lib/systemd/user/ 这里存放的是各个软件包安装的服务。
    • /etc/systemd/user/ 这里存放的是由系统管理员维护的系统范围的用户服务。
    • ~/.config/systemd/user/ 这里存放的是用户自身的服务。

    普通用户使用 timer

    普通用户 ~/.config/systemd/user/

    例子:

    • 每五天执行一次(重启可能失效,未验证)
    # missions.timer                                                                
    [Unit]                                                                          
    Description = Run missions.service every 5 days                                 
    
    [Timer]                                                                         
    Persistent = true                                                               
    OnUnitInactiveSec=5d                                                            
    Unit = missions.service   
    
    [Install]                                                                       
    WantedBy = basic.target 
    
    # missions.service
    [Unit]                                                                          
    Description=Notify missions that you needed to deal with                        
    
    [Service]                                                                       
    Type = simple                                                                   
    ExecStart = /home/foxer/MyBin/missions.sh "/home/foxer/MyBin/missions.txt"      
    
    [Install]                                                                       
    WantedBy= default.target 
    
    • 每3天运行一个脚本

      # cnblog.timer
      [Unit]
      Description=博客园自动上传定时任务
      After=NetworkManager.service
      
      [Timer]
      OnCalendar=*-*-1/3 12:30:00
      Persistent=true
      
      [Install]
      WantedBy=default.target
      
      # cnblog.service
      [Unit]
      Description=博客园自动上传
      
      [Service]
      ExecStart=/bin/python /home/nsfoxer/Mbin/MyTools/cnblog_upload/cnblog.py /home/nsfoxer/Documents/articles/ -d 0
      

      之后运行

      systemctl --user daemon-reload # 重载配置文件
      systemctl --user enable --now cnblog.timer # 用户登录后启动timer单元
      

      可以systemctl --user list-timers --all查看记录

      image-20210814001732466

      注:可以使用systemd-analyze进行分析时间

      systemd-analyze --iterations=10 calendar "*-*-* 12:30:00"

  • 相关阅读:
    JAVA课程设计——飞机大战(团队)
    面向对象设计大作业
    OO之接口-DAO模式代码阅读及应用
    有理数类设计
    图总结
    树、二叉树、查找算法总结
    二叉排序树
    数据结构小结
    C语言文件
    小程序云开发:联表查询去重及排序的不严谨笨办法
  • 原文地址:https://www.cnblogs.com/nsfoxer/p/14348078.html
Copyright © 2011-2022 走看看