Могу ли я использовать символическую ссылку в качестве службы systemd?

Например, у меня есть служба с именем 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 работу systemctl enable mysshd.service ? Нет проблем. В разделе [Install] вашего файла устройства добавьте строку, которая говорит Alias=mysshd.service . Затем выполните systemctl reenable ssh.service чтобы иметь systemd исправлять символические systemctl reenable ssh.service единицы, а вы – золотые.

Теперь вы не mysshd.service что должен делать 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 ).

В стороне, никогда, никогда не изменяйте файлы unitd в каталоге /usr/lib/systemd . Когда-либо! Стандарт иерархии файловой системы требует, чтобы /usr рассматривался как доступный только для чтения. На практике это означает, что менеджер пакетов обрабатывает /usr (за исключением /usr/local ), и вы не трогаете то, что обрабатывает менеджер пакетов, особенно потому, что все, что вы измените, вероятно, в конечном итоге будет перезаписано. Вместо этого поместите свои вещи где-нибудь, как /etc

Символы не были доступны . Но они на сегодняшний день.