systemd 常用命令和配置

发布时间 2023-04-13 13:45:22作者: demoduan

# systemd 配套命令

hostnamectl    #查看设置主机名

localectl         #查看设置本地化语⾔

timedatectl     #查看设置时间时区

loginctl           #查看登录⽤户

journalctl         #⽇志管理

 

# 配置目录

/etc/systemd/system/ #当前系统本地配置本地⽣效的配置

/lib/systemd/system/ #软件包自带的各种配置

systemctl enable xxxx.service 相当于 ln -s /lib/systemd/system/xxxx.service /etc/systemd/system/multi-user.target.wants/xxxx.service

 

Unit 分类

  • Service unit:系统服务
  • Target unit: 多个 Unit 构成的⼀个组
  • Device Unit:硬件设备 
  • Mount Unit:⽂件系统的挂载点 
  • Automount Unit:⾃动挂载点 
  • Path Unit:⽂件或路径 
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组 
  • Snapshot Unit:Systemd 快照,可以切回某个快照 
  • Socket Unit:进程间通信的 socket
  • Swap Unit:swap ⽂件 
  • Timer Unit:定时器
     After 和 Before 只涉及启动顺序,不涉及依赖关系。
     Wants: 表示与 database.service 之间存在"弱依赖"关系,即如果 database.service 启动失败或停⽌运⾏,不影响当前服务继续执⾏。 
     Requires: 表示"强依赖"关系,即如果该服务启动失败或异常退出,那么当前服务也必须退出。
 
Service 分类
  • simple(默认值):ExecStart 字段启动的进程为主进程 
  • forking: ExecStart 字段将以 fork() ⽅式启动,此时⽗进程将会退出,⼦进程将成为主进程
  • oneshot:类似于 simple ,但只执⾏⼀次,Systemd 会等它执⾏完,才启动其他服务
  • dbus:类似于 simple ,但会等待 D-Bus 信号后启动
  • notify:类似于 simple ,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
  • idle:类似于 simple ,但是要等到其他任务都执⾏完,才会启动该服务。⼀种使⽤场合是为了让该服务的输出,不与其他服务的输出相混合 

     Exec 相关: 

  • ExecStart:启动当前服务的命令 
  • ExecStartPre:启动当前服务之前执⾏的命令
  • ExecStartPost:启动当前服务之后执⾏的命令
  • ExecReload:重启当前服务时执⾏的命令 
  • ExecStop:停⽌当前服务时执⾏的命令 
  • ExecStopPost:停⽌当其服务之后执⾏的命令 

     KillMode 相关:

  • control-group(默认值):当前控制组⾥⾯的所有⼦进程,都会被杀掉 
  • process:只杀主进程 
  • mixed:主进程将收到 SIGTERM 信号,⼦进程收到 SIGKILL 信号
  • none:没有进程会被杀掉,只是执⾏服务的 stop 命令。 

     Restart 相关:

  • no(默认值):退出后不会重启 
  • on-success:只有正常退出时(退出状态码为0),才会重启 
  • on-failure:⾮正常退出时(退出状态码⾮0),包括被信号终⽌和超时,才会重启
  • on-abnormal:只有被信号终⽌和超时,才会重启
  • on-abort:只有在收到没有捕捉到的信号终⽌时,才会重启 
  • on-watchdog:超时退出,才会重启
  • always:不管是什么退出原因,总是重启 

 

# 配置模版,[Mount] 为可选类

[Unit] 
Description=..... 
After=network.target 
Requires=database.service disk-data.mount 
 
[Service] 
Type=simple 
ExecStart=the-program $ENV_OPTIONS 
ExecReload=/bin/kill -HUP $MAINPID 
EnvironmentFile=/etc/sysconfig/xxxx 
Environment=ENV_KEY=env_value 
KillMode=process 
Restart=on-failure 
RestartSec=10s 
 
[Mount] 
What=/dev/by-res
Where=/mnt/the-path
 
[Install] 
WantedBy=multi-user.target