启动 systemd 服务时如何传递标志?

neo*_*yle 6 services juju systemd docker kubernetes

请注意,有人提出了类似的问题:
如何在启动“服务”时传递标志?
但是我不久前读到 Linux 从 init.d 切换到 systemd,并且由于该问答已有 6 年的历史,我认为它可能指的是 init.d

我的问题是:
启动 systemd 服务时如何传递标志/参数?假设我执行 systemctl restart Kubelet,这意味着我正在运行 Kubelet 服务,那么我如何查看和修改传递给该服务的标志/参数?(如--anonymous-auth=false)

还有一些背景信息:
我即将安排我的 CNCF Kubernetes 认证考试,考试是基于性能的,涵盖了一些通常从集群管理员中抽象出来的细节。

我了解到有 7 个核心二进制文件构成了 Kubernetes:[docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy 和 kubelet]

其中一些 Kubernetes 控制平面二进制文件是“self托管”/在 Kubernetes 上作为 Pod 运行,并传递参数/标志,如 --service-cluster-ip-range=10.0.0.0/16

以下 URL 有一些核心二进制文件在 Kubernetes 上作为 Docker 容器运行的示例,以及在 YAML 规范中作为参数传入的标志。 https://kubernetes.io/docs/setup/scratch/#scheduler-pod-template

Kubelet 和 Docker 等其他核心 Kubernetes 二进制文件不太适合自托管,而是作为 Linux 系统守护程序运行,它们使用 systemd 运行,并使用 systemctl 和 journalctl 进行管理。无论如何,我之前必须登录到一个节点并执行 systemctl restart docker.service 和 systemctl restart kubelet.service ,但我实际上不知道如何查看或修改传递给它们的标志/参数。

Geo*_*sen 10

这里可以这样做:

  1. 创建一个参数文件说 /etc/.argconf

    ARG1=-o
    ARG2=--verbose
    
    Run Code Online (Sandbox Code Playgroud)
  2. 还有你的 .service 文件:

    EnvironmentFile=/etc/.argconf
    ExecStart=/usr/bin/prog $ARG1 $ARG2
    
    Run Code Online (Sandbox Code Playgroud)

来自同一帖子的另一种方法如下所示:

[Unit]
Description=Test passing multiple arguments

[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
Run Code Online (Sandbox Code Playgroud)

并且必须myservice@.service注意文件的名称,@因为以这种方式将参数传递给服务时需要这样做。然后像这样运行该服务:

sudo systemctl start myservice@"arg1 arg2 arg3".service
Run Code Online (Sandbox Code Playgroud)