/usr/lib/systemd/system .service 名称文件中 @ 的含义

/usr/lib/systemd/system .service 名称文件中 @ 的含义

有一台centos机器,安装了mysql。

我正在尝试修改 mysql 服务文件以包含新的“RequiresMountsFor=/mnt/mysqldata”行,以确保在 mysql 服务器启动之前安装 mysql 数据所在的磁盘。

但我注意到有两个 mysql.service 文件。一个带有 @,另一个没有。

[user@machine system]$ pwd
/usr/lib/systemd/system
[user@machine system]$ ls -l mysqld*
-rw-r--r--. 1 root root 1614 mar 18  2017 mysqld.service
-rw-r--r--. 1 root root 1645 mar 18  2017 [email protected]

我不知道它们之间有哪些区别、使用哪一个或者为什么有两个。

它们的内容实际上是相同的。

[user@machine system]$ diff mysqld.service [email protected]
1c1
< # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
---
> # Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
35c35
< PIDFile=/var/run/mysqld/mysqld.pid
---
> PIDFile=/var/run/mysqld/mysqld-%i.pid
44c44
< ExecStartPre=/usr/bin/mysqld_pre_systemd
---
> ExecStartPre=/usr/bin/mysqld_pre_systemd %I
47c47
< ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
---
> ExecStart=/usr/sbin/mysqld --defaults-group-suffix=@%I --daemonize --pid-file=/var/run/mysqld/mysqld-%i.pid $MYSQLD_OPTS

单位状态提示我正在使用没有@的那个。但我还是想知道为什么有两个@以及它们的含义。

[user@machine system]$ systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since jue 2017-09-21 09:57:05 CEST; 1h 40min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1042 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 950 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1357 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─1357 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

sep 21 09:57:00 machine systemd[1]: Starting MySQL Server...
sep 21 09:57:05 machine systemd[1]: Started MySQL Server.

答案1

因此@在 systemd 中具有特殊含义。

假设我们有一个名为[email protected]以下内​​容的服务

ExecStart=/bin/echo %i

所以如果我这么做

systemctl start [email protected]

我会1进入journalctl

因此,当您启动服务%i后,服务文件将被任何内容替换。@

因此,就您的情况而言,[email protected]如果您想在同一台主机上运行多个 mysql 服务器,情况就是这样。

相关内容