Я не могу найти правильный способ выполнения некоторых локальных сценариев (или очень локальных команд) в systemd, я уже знаю, что не должен создавать службу (в systemd модуле) для таких сценариев (или я должен?) ....
Обходной путь, который я нашел, состоит в том, чтобы создать rc.local и дать ему разрешения на выполнение.
printf '#!/bin/bash \n\nexit 0' >/etc/rc.local
chmod +x /etc/rc.local
Например, если я получу устаревший сервер с настроенным вами простым rc.local, я буду знать, что вы делали, и насколько это повредит обновлению или установке чего-то нового в дистрибутиве, поскольку rc.local уважался внешним пакеты, но с другой стороны, если я устанавливаю сервер и создаю системный модуль или два или три (или даже службы sysvinit), просто для выполнения простой задачи, это может иногда сделать вашу жизнь тяжелее, и намного больше, чем это мои модули Когда-нибудь имена могут конфликтовать с именами новых сервисов, созданных при разработке дистрибутива и, возможно, установленных при обновлении, что вызовет проблемы для моих скриптов!
Я вижу еще один вопрос с просьбой о где rc.local и ответ должен был создать и дать права исполнения, я думаю , что мой вопрос на самом деле не дубликат , потому что я не хочу знать , где это - поверьте, я просто хочу чтобы принять , что она устарела , но я не могу найти правильный путь для ведения такого рода вещи, я должен действительно создать устройство только для некоторых простых , как это?
Ответы:
Как указано в другом месте, он становится умеренно нечистым для использования
rc-local.service
подsystemd
.poweroff
/reboot
команды, которые используют многие люди).rc-local.service
один путь, но Debian предоставляет раскрывающийся файл, который изменяет по крайней мере один важный параметр.rc-local.service
часто может работать хорошо. Если вы беспокоитесь о вышесказанном, все, что вам нужно сделать, это сделать свою собственную копию! Вот волшебство:Я не думаю, что вам нужно понимать каждую деталь [*], но здесь нужно знать две вещи.
Вы должны включить это с
systemctl enable my-startup.service
.Если ваш скрипт имеет зависимость от любого другого сервиса, в том числе
network-online.target
, вы должны объявить его. Например, добавить[Unit]
раздел с линиямиWants=network-online.target
иAfter=network-online.target
.Вам не нужно беспокоиться о зависимости от сервисов «ранней загрузки», в частности, сервисов, которые уже были заказаны ранее
basic.target
. Такие сервисыmy-startup.service
автоматически заказываются послеbasic.target
, если они не установленыDefaultDependencies=no
.Если вы не уверены, является ли одна из ваших зависимостей службой «ранней загрузки», один из подходов заключается в перечислении служб, которые были упорядочены ранее
basic.target
, путем их запускаsystemctl list-dependencies --after basic.target
. (Обратите внимание, это--after
не так--before
).Есть некоторые соображения, которые, я думаю, также применимы к pre-systemd
rc.local
:rc.local
.[*] Я использовал
Type=oneshot
+,RemainAfterExit=yes
потому что это имеет больше смысла для большинства одноразовых сценариев. Он формализует, что вы запустите ряд команд, которыеmy-startup
будут показаны как «активные» после их завершения, и что вы не запустите демон.источник
.service
блок, или если вы действительно хотите написать скрипт инициализации LSB, вы можете сделать это вместо этого. Я не хотел рекомендовать помещать несколько демоновrc-local.service
или эквивалентные, я думаю, что это, вероятно, работает, но гораздо приятнее, если вы можете перезапустить отдельный демон,systemctl restart my-daemon
как и все остальное. Предполагается, что вы положите свои местные услуги/etc/systemd/system
.local-
...Type=oneshot
... это формализует это ... ты не запустишь демона. Если вы хотите получить информацию о запуске демона, задайте новый вопрос.Забудь о
rc.local
.Как я уже говорил о CentOS 7 и Debian 8 и Ubuntu 15 :
Вы используете операционную систему systemd + Linux.
/etc/rc.local
является механизмом двойной обратной совместимости в systemd, поскольку он является механизмом обратной совместимости для механизма, который сам по себе являлся механизмом совместимости в клоне van Smoorenburg System 5rc
.Использование
/etc/rc.local
может пойти ужасно неправильно. Люди были удивлены тем фактом, что systemd работает неrc.local
совсем так, в том же месте в начальной загрузке, как они привыкли. (Или ошибочно ожидать: на самом деле он не работал последним в старой системе, как все еще указывает руководство OpenBSD.) Другие были удивлены тем фактом, что они настроены наrc.local
ожидание старых способов ведения дел. затем полностью отменить подобные новыхudev
правила, NetworkManager,systemd-logind
,systemd-resolved
или различный «Кит» с.Как проиллюстрировано " Почему` init 0` приводит к "Избыточным аргументам" при установке Arch? "», Некоторые операционные системы уже предоставляют systemd без функций обратной совместимости, таких как
systemd-rc-local-generator
генератор . В то время как Debian по-прежнему сохраняет функции обратной совместимости , Arch Linux собирает systemd с их выключенными . Так что в Arch и операционных системах, подобных ей, ожидается/etc/rc.local
полное игнорирование .Забудь о
rc.local
. Это не путь. У вас есть операционная система systemd + Linux. Поэтому создайте правильный системный сервисный модуль и не начинайте с того момента, когда нет двух уровней обратной совместимости. (В Ubuntu и Fedora, это три раза удалены, фургон Smoorenburg System 5rc
клон, а затемrc.local
то , а затем уже сам дважды вытеснили, более десяти лет назад, сначала выскочкой , а затем Systemd.)Также помните первое правило для миграции на systemd .
Это даже не новая идея, специфичная для systemd. В системах van Smoorenburg
rc
и Upstart нужно было сделать правильныйrc
сценарий van Smoorenburg или файл задания Upstart, а не использовать егоrc.local
. Даже руководство FreeBSD отмечает, что в настоящее времяrc
вместо использования используется правильный сценарий Mewburn/etc/rc.local
. Mewburnrc
был представлен NetBSD 1.5 в 2000 году./etc/rc.local
даты со времени седьмого издания Unix и до. Он был заменен/etc/inittab
и основан на уровне запускаrc
в AT & T Unix System 3 (с немного отличающимся/etc/inittab
в AT & T Unix System 5) в 1983 году . Даже это теперь история.Создание собственных определений нативных служб для системы управления услугами, будь то служба расслоение для перекуса набора инструментов - х
service-manager
иsystem-control
,/etc/rc.d/
скрипт для Mewburnrc
, служебный блок файл для Systemd, файл задания для Upstart, каталог услуг для runit / s6 / DaemonTools - или даже/etc/init.d/
сценарий для ван Смуренбургаrc
.В systemd такие файлы, добавленные администратором,
/etc/systemd/system/
обычно добавляются (или/usr/local/lib/systemd/system/
редко). С Nosh Service Manager,/var/local/sv/
это обычное место для локальных пакетов услуг. Mewburnrc
на FreeBSD использует/usr/local/etc/rc.d/
. Файлы упакованных сервисных модулей и сервисные пакеты, если вы их делаете, все же отправляются в разные места.дальнейшее чтение
rc.local
, Руководство FreeBSD System Manager . 2016-04-23./etc/rc.local
илиchmod -x
это . Redhat ошибка # 734268.rc.local
начинает рано . системная ошибка # 7703rc.local
. bencane.com./etc/inittab
это вещь прошлого. , Часто задаваемые ответы.systemd.unit
" Отсутствуют пути поиска системы со страницы руководства ". Поправка для systemd doco . Часто задаваемые ответы.источник
Резюме https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd
Создайте /etc/systemd/system/rc-local.service:
Затем:
Проверить с:
источник
StandardOutput=journal+console
(консоль эквивалентна tty в вашем примере), что кажется гораздо более полезным для устранения неполадок. Также поддержкаSysVStartPriority=
была удалена в какой-то момент. Может быть, вы могли бы прокомментировать, насколько это важноSysVStartPriority=
, или удалить его. Кроме того, это достойный ответ.