Найкраще розмістити файли системного блоку: /etc/systemd/system
Просто додайте ціль у розділ [Встановити], читайте "Як це знати?" для деталей. ОНОВЛЕННЯ : /usr/local/lib/systemd/system
інший варіант, прочитайте "Сіру область" для деталей. "
Найкраще розмістити файли одиниць користувача : /etc/systemd/user
або $HOME/.config/systemd/user
це залежить від дозволів та ситуації.
Правда полягає в тому, що систематизовані одиниці (або як їх називає вступне речення, "конфігурації одиниць") можуть переходити куди завгодно - за умови, що ви готові робити ручні символьні посилання і вам відомо про застереження. Це полегшує життя, щоб розмістити пристрій там, де його systemctl daemon-reload
можна знайти з певних вагомих причин:
- Використання стандартного розташування означає, що системні генератори знайдуть їх і полегшать їх для включення під час завантаження
systemctl enable
. Це відбувається тому, що ваш пристрій автоматично буде доданий до дерева залежності одиниці (кеш одиниці).
- Не потрібно думати про дозволи, тому що лише визначені права користувачі можуть писати у визначені області.
Звідки це знати?
І як саме systemctl enable
відомо, де створити симпосилання? Ви жорстко кодуєте його в самому підрозділі під [install]
розділом. Зазвичай є така лінія, як
[Install]
WantedBy = multi-user.target
що відповідає заздалегідь визначеному місці у файловій системі. Таким чином, systemctl
відомо, що цей блок залежить від групи одиничних файлів під назвою multi-user.target
("target" - термін, який використовується для позначення груп залежностей одиниць. Ви можете перелічити всі групи systemctl list-units --type target
). Група файлів одиниць, що завантажуються ціллю, поміщається в targetname.target.wants
каталог. Це просто каталог, повний символьних посилань (або реальна річ). Якщо ваш [Install]
розділ говорить , що це , але якщо символічна посилання на нього не існує в каталозі, то він не буде завантажуватися. Коли генератори системних одиниць додають ваш файл одиниці до кешу дерева залежностей під час завантаження (ви можете вручну запускати генератори за допомогою ), він автоматично знає, куди поставити символьне посилання - у цьому випадку в каталогWantedBy
multi-user.target
multi-user.target.wants
systemctl daemon-reload
/etc/systemd/system/multi-user.target.wants/
якщо вам це потрібно.
Основні моменти в посібнику:
Додаткові одиниці можуть бути завантажені в systemd ("зв'язані") з каталогів, які не знаходяться на шляху завантаження одиниці. Дивіться команду посилання для systemctl (1).
Під systemctl шукайте командні файли команд
Шлях завантаження файлу блоку
Файли файлів завантажуються з набору шляхів, визначених під час компіляції, описаних у двох таблицях нижче. Файли файлів, знайдені в каталогах, перелічених раніше, замінюють файли з тим самим іменем у каталогах, що знаходяться нижче.
Коли встановлена змінна $SYSTEMD_UNIT_PATH
, вміст цієї змінної перевизначає одиничний шлях навантаження. Якщо $SYSTEMD_UNIT_PATH
закінчується порожній компонент (":"), до вмісту змінної буде доданий звичайний одиничний навантажувальний шлях.
Таблиця 1 та Таблиця 2 від man systemd.unit
хороші.
Завантажуйте контури під час роботи в системному режимі ( --system
).
/etc/systemd/system
Локальна конфігурація
/run/systemd/system
Одиниці виконання
/usr/lib/systemd/system
Одиниці встановлених пакетів
Шлях завантаження під час роботи в режимі користувача ( --user
)
Існує різниця між одиницями користувачів та всіма / глобальними одиницями користувачів.
Залежно від користувача
$XDG_CONFIG_HOME/systemd/user
Конфігурація користувача (використовується лише тоді, коли $XDG_CONFIG_HOME
встановлено)
$HOME/.config/systemd/user
Конфігурація користувача (використовується лише тоді, коли $XDG_CONFIG_HOME
не встановлено)
$XDG_RUNTIME_DIR/systemd/user
Одиниці виконання (використовуються лише тоді, коли $XDG_RUNTIME_DIR
встановлено)
$XDG_DATA_HOME/systemd/user
Одиниці пакетів, які були встановлені в домашній каталог (використовується лише тоді, коли $XDG_DATA_HOME
встановлено)
$HOME/.local/share/systemd/user
Одиниці пакетів, які були встановлені в домашній каталог (використовується лише тоді, коли $XDG_DATA_HOME
не встановлено)
--global
(всі користувачі)
Одиниці, що стосуються всіх користувачів - значить, що належать і кожному користувачеві. Таким чином, кожен користувач може зупинити ці сервіси, навіть якщо адміністратор вмикає їх під час завантаження.
/etc/systemd/user
Локальна конфігурація для всіх користувачів ( systemctl --global enable userunit.service
)
/usr/lib/systemd/user
Одиниці пакетів, встановлених у всій системі для всіх користувачів
/run/systemd/user
Одиниці виконання
Сіра зона
З одного боку, Стандарт ієрархії файлів визначає, що /etc
це для локальних конфігурацій, які не виконують бінарні файли. З іншого боку, він вказує, що /usr/local/
"використовується для системного адміністратора при локальній установці програмного забезпечення". Ви також можете стверджувати (якщо не лише з метою організації), що всі файли системного блоку повинні підпадати під дію /usr/local/lib/systemd/system
, але це призначено для файлів одиниць, які входять до "програмного забезпечення", а не від менеджера пакетів. Відповідні системні одиниці користувачів, які є загальносистемними, можуть перейти в підпорядкування
/usr/local/lib/systemd/user
.
/etc/systemd/system
там, де ви ставите свої сценарії, Pacman ставить сценарії пакетів/usr/lib/systemd/system
і видаючиsystemctl enable foo.service
створює посилання від/usr
до/etc
...