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

有一个MySQL安装在一个centos机器上。

我正在尝试修改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. 

所以@在systemd中有特殊的含义。

假设我们有一个名为[email protected]的服务,其中包含以下内容

 ExecStart=/bin/echo %i 

所以,如果我这样做

 systemctl start [email protected] 

我在journalctl得到1

因此,在启动服务时,服务文件中的%i会被@后的任何内容replace。

所以在你的情况下,如果你想在同一个主机上运行多个mysql服务器, [email protected]就是这样。