Linux之systemctl添加服务

  • Post author:
  • Post category:linux




配置文件

将服务添加到systemctl管理,需要添加自定义的service文件到/usr/lib/systemd/system/下



nginx配置示例

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target



配置详解



Unit

  • Description : 服务的简单描述 Documentation : 服务文档
  • Before、After:定义启动顺序。Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx.service之后启动
  • Requires: 指定服务依赖于哪些服务 (强依赖关系,一旦所依赖服务异常,当前服务也随之停

    止)
  • Wants: 指定服务依赖于哪些服务 (弱依赖关系,所依赖服务异常不影响当前服务正常运行)



Service

  • Type

    • simple(默认值):默认值,执行ExecStart指定的命令,启动主进程
    • forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
    • oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
    • notify:与 simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。
    • dbus:当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪
    • idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和simple 类似。
  • PIDFile:pid文件路径
  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPost:启动当前服务之后执行的命令
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • RestartSec:重启服务之前需要等待的秒数
  • Restart:定义了退出后,Systemd 的重启方式

    • no (默认值):退出后不会重启;
    • on-success:当进程正常退出时(退出状态码为0),才会重启;
    • on-failure:当进程非正常退出时 (退出状态码非0),包括被信号终止和超时,才会重启;
    • on-abnormal:当被信号终止和超时,才会重启;
    • on-abort:当收到没有捕捉到的信号终止时,才会重启;
    • on-watchdog:看门狗超时退出,才会重启;
    • always:总是重启;
  • TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
  • Environment:指定环境变量
  • KillMode:定义 Systemd 如何停止服务

    • control-group (默认值): 当前控制组里面的所有子进程,都会被杀掉;
    • process:只杀主进程;
    • mixed:主进程将收到SIGTERM 信号,子进程收到SIGKILL 信号;
    • none:没有进程会被杀掉;
  • KillSignal
  • PrivateTmp:创建私有的内存临时空间



Install

Alias:为单元提供一个空间分离的附加名字。

RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。

WantBy:单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。 Also:指出和单元一起安装或者被协助的单元。 DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例



namenode配置示例

[Unit]
Description=hdfs-namenode
After=ambari-agent.service

[Service]
Type=forking
User=hdfs
ExecStart=/xxx/hadoop/sbin/hadoop-daemon.sh --config /etc/hadoop/conf start namenode
ExecStop=/xxx/hadoop/sbin/hadoop-daemon.sh --config /etc/hadoop/conf stop namenode
PIDFile=/var/run/hadoop/hdfs/hadoop-hdfs-namenode.pid
Restart=always
RestartSec=5s
TimeoutSec=1200s
StartLimitInterval=600s
StartLimitBurst=3
StartLimitAction=none
Environment=HADOOP_LIBEXEC_DIR=/xxx/hadoop/libexec
LimitNOFILE=128000
LimitCORE=infinity
LimitNPROC=65536


[Install]
WantedBy=multi-user.target



版权声明:本文为zincooo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。