znaczenie @ w plikach nazw usługi / usr / lib / systemd / system .service


1

W maszynie centos zainstalowany jest mysql.

Próbuję zmodyfikować plik usługi mysql, tak aby zawierał nowy wiersz „RequMountsFor = / mnt / mysqldata”, aby upewnić się, że dysk, na którym znajdują się dane mysql, zostanie zamontowany przed uruchomieniem serwera mysql.

Zauważyłem jednak, że istnieją dwa pliki mysql.service. Jeden z @, a drugi bez niego.

[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 mysqld@.service

Nie wiem, jakie są między nimi różnice, który z nich jest używany i dlaczego są dwa z nich.

Ich zawartość jest praktycznie taka sama.

[user@machine system]$ diff mysqld.service mysqld@.service
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

Status urządzenia sugeruje, że używany jest ten bez @. Ale wciąż zastanawiam się, dlaczego są dwa i ich znaczenie.

[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.

pamiętaj, że nie powinieneś edytować tego pliku bezpośrednio, ale zamiast tego skopiuj go do podobnej struktury folderów systemd w / etc /, aby zapobiec zastąpieniu go przy następnej aktualizacji
Dennis Nolte

Użycie znaku „@” jest udokumentowane w man systemd.service. Zobacz man systemd.directivestakże pełną listę dyrektyw i man systemd.indexpełną listę stron systemowych.
Mark Stosberg,

Odpowiedzi:


1

Więc @ma szczególne znaczenie w Systemd.

Załóżmy, że mamy usługę echo@.servicez następującymi elementami

ExecStart=/bin/echo %i

Więc jeśli to zrobię

systemctl start echo@1.service

Wszedłbym 1do journalctl.

Tak więc %iplik usługi zostaje zastąpiony czymkolwiek po @uruchomieniu usługi.

Wygląda na to, że w twoim przypadku mysqld@.servicebyłoby, gdybyś chciał uruchomić wiele serwerów mysql na tym samym hoście.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.