Linux 服务、Service、Cgroup相关

查看一个服务/service的信息


[root@localhost ~]# systemctl status kite*
● **.service -** of ***
   Loaded: loaded (/etc/systemd/system/***.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/***.service.d
           └─50-CPUQuota.conf, 50-MemoryLimit.conf
   Active: active (running) since 一 2024-01-22 09:16:21 CST; 5h 32min ago
 Main PID: 13698 (***-amd6)
   Memory: 281.8M (limit: 300.0M)
   CGroup: /system.slice/***.service
           ├─ 2852 /datadisk0/****
           ├─ 2981 /datadisk0/******

红色部分包括service 的配置文件、 CPU内存限制配置信息、拉起的子进程。

Cgroup是控制组的缩写,它是Linux内核提供的一种机制,可以对系统中运行的进程或服务进行资源限制和管理,最后面2行表名这2个进程受***.service这个服务的控制组。

把程序变成服务_如何将一个执行程序做成一个服务?

Linux系统中,有一种称为systemd的服务管理工具,它可以让您将一个进程或者者者者脚本作为一个个个独立的服务来运行,并且可以设置服务的启动类型、依赖关系、开机自启动等属性。要将一个进程变成一个service,您需要以下几个步步步骤:

首先,您需要找到您想要作为服务的进程或者者者者脚本,并且将其放在/usr/local/sbin目录下,这样系统才能识别它们。
然后,您需要创建一个.service文件,用来描述服务的基本信息和配置。.service文件通常存存储在/lib/systemd/system目录下,文件名以.service结尾。您可以使用文本编辑器来编写.service文件,或者使用vim命令来直接编辑。
接着,您需要在.service文件中填写一些必要的字段,包括:
[Unit]:这一部分用来描述服务的简单描述和文档信息。
[Service]:这一部分用来定义服务的启动类型、执行命令、重启方式等属性。
[Install]:这一部分用来指定服务所属的目标组和是否开机自启动。
最后,您需要保存并退出.service文件,并且执行systemctl daemon-reload命令来重新加载所有已经创建的.service文件。
下面是一个简单的.service文件示例:

[Unit]
Description=My Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/sbin/myprogram
ExecStop=/usr/local/sbin/myprogram stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

这个示例中,我们定义了一个名为My Service的简单服务,并且指定了它在网络连接后才会启动。我们还定义了它使用simple类型启动,并且执行/usr/local/sbin/myprogram这个可执行文件。当服务停止时,我们也会执行/usr/local/sbin/myprogram stop这个命令。如果服务出现故障时重启失败,则会重启该服务。我们还指定了该服务属于multi-user.target用户组,并且开机自启动。

如何配置service在程序挂掉后自动重启以及重启时间的配置?

在service文件的[Service]部分中添加Restart=always和RestartSec=30两个选项,分别表示在任何情况下都要重启服务,并且重启间隔为30秒。例如:
[Service]
Type=simple
Restart=always
RestartSec=30
WorkingDirectory=/path/to/service
ExecStart=/usr/bin/service_name

在service文件的[Service]部分中添加Type=notify选项,表示服务会通过D-Bus通知Systemd重启时执行的命令。例如:
[Service]
Type=notify
WorkingDirectory=/path/to/service
ExecStart=/usr/bin/service_name

在service文件的[Service]部分中添加StartLimitInterval=0选项,表示无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启。例如:
[Service]
Type=simple
StartLimitInterval=0
WorkingDirectory=/path/to/service
ExecStart=/usr/bin/service_name

查看一个容器的 cgroup 资源限制

  1. 找到容器的 PID,比如使用 docker inspect 命令。
  2. 查看 /proc/PID/cgroup 文件,可以看到容器所属的 cgroup 的层级和路径,比如 0::/docker/1234567890abcdef
  3. 根据层级和路径,找到对应的 cgroup 目录,比如 /sys/fs/cgroup/cpu/docker/1234567890abcdef
  4. 在 cgroup 目录下,查看相应的子系统的配置文件,比如 cpu.cfs_quota_us 和 cpu.cfs_period_us,可以得到 CPU 限制的信息。

你可能感兴趣的:(linux,服务器,运维)