zoukankan      html  css  js  c++  java
  • 专题:『systemd』


    [COMMAND]

    Systemd Daemons:
      systemd networkd journald logind "user session"
    Systemd units:
      service[系统服务] 
      mount[文件系统挂载点] 
      automount[自动挂载点] 
      target[多个unit组成的一个组] 
      timer[定时任务] 
      device[硬件设备] 
      socket[进程间通信的socket] 
      swap[swap文件] 
      path[文件或路径] 
      snapshot[systemd快照,可切换回某个运行状态] 
      slice[进程组] 
      scope[不是由systemd启动的外部进程]
    Systemd Utilities:
      systemctl journalctl loginctl hostnamectl localectl timedatectl etc.
    systemctl rescue  
      无须重启直接切换至救援模式
    systemctl get-default
      查看启动时的默认target
    systemctl isolate/set-default *.target
      isolate切换target(将关闭前一个target中所有不属于后一个target的进程)
      set-default用于设置新的默认target,实质是将目标target软链接至/etc/systemd/system/default.target systemd
    -analyze [critical-chain [*.unit]]   查看系统启动耗时,可显示单个服务信息 loginctl user-status USERNAME   显示指定用户的所有进程信息 loginctl kill-user USERNAME   终止指定用户的所有进程 systemctl [list-units] --all/--failed --state=inactive --type=service   --all显示所有状态的units   --failed仅显示启动失败的   --statue=inactive仅显示没有配置文件工或启动失败的   --type指定要显示的unit类别 systemctl [-H root@10.1.1.1] status [*.unit]   不加参数,则显示当前系统状态   指定远程主机、unit(如某个service),则显示指定unit的状态 systemctl show [-p CPUShares] [*.unit]   显示系统或指定unit的所有底层参数,-p可用于指定仅显示特定参数 systemctl [--runtime] set-property *.unit CPUShares=500   设置某个unit的指定属性,--runtime表示临时生效,直到下一次系统重启 systemctl is-active/is-failed/is-enabled *.unit   判断某个unit处于何种状态:正常运行、启动失败、随机启动,常用于脚本条件判断 systemctl kill [--signal=SIGKILL/HUP etc.] [--kill-who=main/control/all] *.unit   不同于stop方式,kill是暴力终止一个服务的所有子进程,--kill-who选项可选择只终止主进程、控制进程或所有进程 systemctl daemon-reload   使所有更改过的配置文件生效 systemctl list-dependencies [--all] *.unit   列出一个unit的所有依赖(子units),默认不会展开其中的target,--all可展开target中的子项
    journalctl:显示所有日志,默认less分页显示
    journalctl -b -1:查看上一次启动的日志,-0代表最近一次
    journalctl -k:只查看内核日志
    journalctl --since="2016-10-11 11:10:54" --until="2020-01-29 00:00:36":按精确的起始时间查询日志
    journalctl -f:类似于tail -f的功能,动态监控日志
    journalctl -n 100:查看最新的100条日志
    journalctl -u xxx.unit -u yyy.unit:查看指定unit的日志,可合并指定多个
    journalctl _PID:查看指定pid进程的日志
    journalctl --disk-usage:显示日志占用的磁盘空间
    journalctl -o:指定日志显示的格式
    journalctl -p:指定日志显示的级别
    「共有8个级别」:"emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6),"debug" (7)
    /etc/systemd/journald.conf中可配置日志保存期限、日志最大容量等选项
    systemctl list-unit-files [--type=service]
      列出所有unit配置文件,--type用于指定unit类型;显示结果有四种状态:enabled[已建立启动链接 #但不一定当前正在运行] disabled[没有建立启动链接] static[此unit无install部分,不能独立启动,只能作为其它unit的依赖]、masked[禁止启动]
    systemctl cat *.unit
      查看某个unit的配置文件内容

    [CONFIG_FILES]

    Systemd默从/etc/systemd/system、/usr/lib/systemd/system中读取unit配置文件,前者优先级更高;更底层的配置文件在/etc/systemd、/usr/lib/两个目录下,如/etc/systemd/journald.conf存放系统日志配置文件
      /etc/systemd/system/multi-user.target.wants目录中的unit是为开机启动者
      可手动链接unit至上述wants目录下,或使用“systemctl enable/disable *.unit”操作,或省略后缀.unit,systemd默认为.unit
      将某个unit的配置文件链接或取消链接至/dev/null,即可设置禁止或允许其启动,等效于“systemctl mask/unmask *.unit”
    配置文件通常分为三部分:[Unit]、[Install]、[Service],其中Service是service类unit特有
    [Unit]
    #通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
    Description:简短描述 Documentation:文档地址 Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败 Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动 After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动 #注意:after、before只涉及启动顺序,并不一定存在依赖关系 Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行 Condition...:当前 Unit 运行必须满足的条件,否则不会运行 Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
    [Service]
    #只有 Service 类型的 Unit 才有这个区块
    Type:定义启动时的进程行为。它有以下几种值
    Type=simple:默认值,执行ExecStart指定的命令,启动主进程
    Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
    Type=oneshot:每次系统启动只运行一次,执行结束后,再继续往下执行其它进程
    Type=dbus:当前服务通过D-Bus启动
    Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
    Type=idle:若有其他任务执行完毕,当前服务才会运行
    
    
    ExecStart:启动当前服务的命令
    ExecStartPre:启动当前服务之前执行的命令
    ExecStartPost:启动当前服务之后执行的命令
    ExecReload:重启当前服务时执行的命令
    ExecStop:停止当前服务时执行的命令
    ExecStopPost:停止当其服务之后执行的命令
    RestartSec:自动重启当前服务间隔的秒数
    Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括no(默认值)、always、on-success、on-failure、on-abnormal、on-abort、on-watchdog
    TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
    Environment:指定环境变量
    EnvironmentFile:指定当前服务的环境参数文件,其内部的“key=value”键值对,可以用$key的形式,在当前配置文件中引用
    连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行
    例如:
    EnvironmentFile=-/etc/xxd,就表示即使/etc/xxd文件不存在,也不会抛出错误
    [Install]
    #通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动
    WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入
    /etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中 RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中 Alias:当前 Unit 可用于启动的别名 Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
    示例:
    root # systemctl cat sshd.service
    # /usr/lib64/systemd/system/sshd.service
    [Unit]
    Description=OpenSSH server daemon
    After=syslog.target network.target auditd.service
    
    [Service]
    ExecStartPre=/usr/bin/ssh-keygen -A
    ExecStart=/usr/sbin/sshd -D -e
    ExecReload=/bin/kill -HUP $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    
    # /run/systemd/system/sshd.service.d/50-CPUShares.conf
    [Service]
    CPUShares=500
    
    
    [Timer]

    [Unit]
    Description=Run myscript weekly
     
    [Timer]
    # 按日历规划执行,如每天的11点11分11秒执行Unit=项指定的service
    OnCalendar=*-*-* 11:11:11
    # 首次运行要在启动后10分钟后
    OnBootSec=10min
    # 每次运行间隔时间
    OnUnitActiveSec=1w
    # 定义时间精度,默认1min,可用时间单位如h、m、s、us(毫秒);如下定义为1h代表任务会在指定的时间后1小时内执行
    AccuracySec=1h
    # 指定要执行的任务,若任务名称和timer名称一致,此项可忽略
    Unit=myscript.service
     
    [Install]
    WantedBy=multi-user.target
    注意:对应的service无需enable,只须enable关联的timer即可
    Systemd开关机流程:
    https://www.freedesktop.org/software/systemd/man/bootup.html#System%20Manager%20Bootup
  • 相关阅读:
    第五章总结
    第二章总结
    第一章、基础知识总结
    实验 9 根据材料编程
    实验5
    汇编实验4
    实验 3 编程、编译、连接、跟踪
    实验 2 用机器指令和汇编指令编程
    汇编-实验一
    react面试笔录
  • 原文地址:https://www.cnblogs.com/hadex/p/5817143.html
Copyright © 2011-2022 走看看