Например, у меня есть служба с именем mysshd.service
в /usr/lib/systemd/system/
каталоге. Могу ли я создать символическую ссылку, такую как:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
так что любая операция, которую я делаю с fool.service, будет отражена в mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Моя цель - переписать нативный сервис sshd с помощью символической ссылки моего собственного сервиса sshd.
Ответы:
Насколько я знаю, systemd не справится с этим особенно хорошо. Как я понимаю, вы хотите изменить поведение
sshd.service
, верно?К счастью для вас, systemd предназначен для такого рода вещей. Просто введите определение службы
/etc/systemd/system/ssh.service
, выполнитеsystemctl daemon-reload
перезагрузку для файлов модулей, и systemd автоматически использует эту конфигурацию вместо системыssh.service
.Хотите тоже
systemctl enable mysshd.service
работать? Нет проблем. В[Install]
разделе вашего файла модуля добавьте строку с надписьюAlias=mysshd.service
. Затем выполнитеsystemctl reenable ssh.service
команду systemd, чтобы исправить символьные ссылки, и все будет отлично.Теперь вы не дали подробностей о том, что
mysshd.service
предполагается делать. Если он полностью отличается от нормальногоssh.service
, отлично! Используйте метод выше. Однако, если вы просто хотите изменить одну маленькую вещь, то вы используете неправильный подход. systemd позволяет вам создавать «фрагменты» файлов модулей, которые будут применяться поверх обычных файлов модулей. Это позволяет добавлять или переопределять отдельные директивы, а остальная часть файла модуля получать обновления от менеджера пакетов. Для этого просто создайте/etc/systemd/system/ssh.d/my-custom-config.conf
(вы можете изменить,my-custom-config.conf
чтобы быть тем, что вы хотите, и вы также можете иметь несколько файлов переопределения). В этом файле поместите все директивы, которые вы хотите изменить или добавить к обычнымssh.service
. Вы даже можете добавитьAlias=
директивы, так что этоsystemctl start mysshd.service
работает! Просто не забудьте выполнитьsystemctl daemon-reload
после того, как вы сделали (и, если вы использовалиAlias=
,systemctl reenable ssh.service
).Кроме того, никогда не меняйте системные файлы модулей в
/usr/lib/systemd
. Когда-либо! Стандарт иерархии файловой системы требует, чтобы/usr
он обрабатывался только для чтения. На практике это означает, что менеджер пакетов обрабатывает/usr
(кроме/usr/local
), и вы не трогаете то, что обрабатывает менеджер пакетов - особенно потому, что все, что вы измените, вероятно, в конечном итоге будет перезаписано. Вместо этого поместите свои вещи куда-нибудь как/etc
.источник
foo.service
, запуститеsudo systemctl edit foo.service
, и он сохранит все, что вы набрали/etc/systemd/system/foo.service.d/override.conf
.Alias=
директива НЕ работает в переопределенных файлах. См github.com/systemd/systemd/issues/1090systemctl edit
том, когда я написал этот ответ. не стесняйтесь редактировать мой ответ, чтобы отразитьAlias=
ошибку (поставьте «ОК с ответчиком» или что-то в сообщении редактирования). хороший улов.Используйте
link
с полным путем:Обратите внимание, что вы не можете связать служебный файл, который сам по себе уже является ссылкой.
источник
Симлинки раньше не были возможны . Но они на сегодня.
источник