Symbol @ oraz systemctl i vsftpd


27

Mam dwuczęściowe pytanie.

  1. Jakie znaczenie ma symbol @ w skryptach systemctl?

  2. Jak rozpocząć vsftpd w Fedorze 16 (która w niektórych samouczkach wydaje się zawierać @ w nazwie)? Zrobiłem wszystko, co mówią samouczki, i wciąż daje mi to błąd. http://blog.tuxforge.com/fedora-16-vsftpd/

Co ja zrobiłem

systemctl enable vsftpd@.service

Co widzę

Failed to issue method call: No such file or directory

(Próbowałem tego również z bezwzględną ścieżką, a po sprawdzeniu nie ma takiego pliku. Rzeczywisty plik nie zawiera znaku @ i znajduje się w katalogu / lib / systemd / system /. Próbowałem też uruchamianie i włączanie z i bez symbolu @, włączanie działa, ale uruchamianie nie. Zdaję sobie sprawę, że artykuł jest już nieaktualny, ale nadal nie mogę uruchomić usługi. Gdy próbuję się połączyć, nie pozwala mi to)

EDYCJA: Mam usługę, aby jakoś zacząć, ale nadal chciałbym wiedzieć, co oznacza symbol @ w niektórych nazwach usług. Nadal pojawia się komunikat o błędzie logowania # 500 nie może zmienić katalogu [...], co to znaczy?

Aby rozpocząć, właśnie napisałem

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)

Odpowiedzi:


48

@Symbol jest dla służb specjalnych, gniazd i innych jednostkach, gdzie można uruchamiać wiele instancji.

Na przykład getty@.servicejest to usługa zapewniająca terminale logowania tekstowego. Po naciśnięciu Ctrl+ Alt+ F2, getty@tty2.servicezostanie uruchomiony, tworzenie wirtualnego terminala nr 2.

Inną usługą korzystającą z tej funkcji jest OpenVPN. Możesz utworzyć plik /etc/openvpn/work.confskonfigurowany do łączenia się z VPN w miejscu pracy, a następnie systemctl start openvpn@work.servicedo łączenia się z nim. Podobnie możesz utworzyć /etc/openvpn/home.conf, a następnie rozpocząć, openvpn@home.servicejeśli masz VPN w domu. Zapobiega to tworzeniu .servicepliku dla każdej sieci VPN, z którą się łączysz.

Ale nie wierz mi na słowo. Wypróbuj to! Stwórzmy prostą usługę, która wysyła komunikat do syslog. Utwórz plik /etc/systemd/system/echo@.serviceo następującej treści:

[Unit]
Description=Echo '%I'

[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog

Zauważ %i? systemd zapełni to, co następuje po @znaku, gdy usługa jest uruchamiana. Spróbuj rozpocząć echo@foo.service:

systemctl start echo@foo.service

Następnie sprawdź dziennik :

 journalctl -n10

Na dole zobaczysz, że systemd działał /bin/echo foo:

Feb 24 12:41:01 localhost echo[8412]: foo

A teraz spróbuj systemctl start echo@bar.service. Tym razem systemd zapełni %isię bar, więc zobaczysz:

Feb 24 12:42:51 localhost echo[8432]: bar

To wszystko! Wszystko może potencjalnie następować po @znaku, ponieważ systemd po prostu zastępuje %igo definicją usługi. OpenVPN używa go do konfiguracji, inne usługi mogą użyć do czegoś innego, na przykład numeru portu.

Aby uzyskać więcej informacji, zobacz man systemd.unit.


1
czy są uruchamiane i zatrzymywane jak zwykłe usługi, z wyjątkiem włączenia symbolu @? Na przykład, jeśli miałbym uruchomić usługę po raz drugi, czy po prostu zacznę od nowa? Jak uruchomić wiele instancji?
rubixibuc

Tak, po prostu zmień tekst następujący po @znaku na odpowiedni. Dodałem przykład, który możesz przetestować, aby zobaczyć, jak to działa.
Łaty

@Patches: Gdzie jest dokument „Symbol @ dotyczy usług specjalnych, w których można uruchomić wiele instancji.”? Nie widzę tego na stronie freedesktop.org/software/systemd/man/systemd.service.html
pevik

Jest to opisane w systemd.unit . Przydaje się również do gniazd i innych rodzajów jednostek. (Dodano, aby odpowiedzieć teraz, dzięki. :-)
Łaty
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.