Na przykład mam usługę o nazwie mysshd.service
w /usr/lib/systemd/system/
katalogu. Czy mogę utworzyć dowiązanie symboliczne, takie jak:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
tak, że jakakolwiek operacja, którą wykonam z fool.service, zostanie odzwierciedlona w mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Moim celem jest zastąpienie natywnej usługi sshd dowiązaniem symbolicznym mojej własnej usługi sshd.
Odpowiedzi:
O ile wiem, systemd nie poradzi sobie z tym szczególnie dobrze. Jak rozumiem, chcesz zastąpić zachowanie
sshd.service
, prawda?Na szczęście systemd jest przeznaczony do tego rodzaju rzeczy. Wystarczy wprowadzić definicję usługi
/etc/systemd/system/ssh.service
, wykonać,systemctl daemon-reload
aby ponownie załadować pliki jednostek, a systemd automatycznie użyje tej konfiguracji zamiast systemussh.service
.Też chcesz mieć
systemctl enable mysshd.service
pracę? Nie ma problemu. W[Install]
sekcji pliku jednostki dodaj wiersz z napisemAlias=mysshd.service
. Następnie wykonaj,systemctl reenable ssh.service
aby systemd naprawił dowiązania symboliczne jednostki, a ty jesteś złoty.Teraz nie podałeś szczegółowych informacji na temat tego, co
mysshd.service
należy zrobić. Jeśli to zupełnie inne niż normalnessh.service
, świetnie! Użyj powyższej metody. Jeśli jednak chcesz tylko zmienić jedną drobną rzecz, używasz niewłaściwego podejścia. systemd umożliwia tworzenie „fragmentów” plików jednostkowych, które będą stosowane na wierzchu zwykłych plików jednostkowych. Pozwala to dodawać lub zastępować poszczególne dyrektywy, jednocześnie pozwalając reszcie pliku jednostki otrzymywać aktualizacje od menedżera pakietów. Aby to zrobić, po prostu utwórz/etc/systemd/system/ssh.d/my-custom-config.conf
(możesz zmienićmy-custom-config.conf
na dowolne, możesz też mieć wiele plików zastępujących). W tym pliku umieść wszystkie dyrektywy, które chcesz zmienić lub dodać do zwykłychssh.service
. Możesz nawet dodawaćAlias=
dyrektywy, więc tosystemctl start mysshd.service
działa! Pamiętaj tylko, aby wykonaćsystemctl daemon-reload
Po zakończeniu (i, jeśli jest używanaAlias=
,systemctl reenable ssh.service
).Nawiasem mówiąc , nigdy nie zmieniaj plików jednostkowych w systemie
/usr/lib/systemd
. Zawsze! Standard Hierarchia systemu plików wymaga, aby/usr
traktować go jako tylko do odczytu. W praktyce oznacza to, że menedżer pakietów obsługuje/usr
(z wyjątkiem/usr/local
) i nie dotykasz tego, co obsługuje menedżer pakietów - zwłaszcza, że cokolwiek zmienisz, prawdopodobnie zostanie ostatecznie nadpisane. Zamiast tego umieść swoje rzeczy gdzieś jak/etc
.źródło
foo.service
, uruchomsudo systemctl edit foo.service
, a zapisze to, co wpisałeś/etc/systemd/system/foo.service.d/override.conf
.Alias=
dyrektywa NIE działa w przypadku plików zastępujących. Zobacz github.com/systemd/systemd/issues/1090systemctl edit
tym, kiedy napisałem tę odpowiedź. edytuj moją odpowiedź, aby odzwierciedlićAlias=
błąd (wstaw „OK z odpowiedzią” lub coś w komunikacie edycji). dobry chwyt.Użyj
link
z pełną ścieżką:Pamiętaj, że nie możesz połączyć pliku usługi, który sam w sobie jest już łączem.
źródło
Symlinks nie był wcześniej możliwy . Ale są na dzień dzisiejszy.
źródło