Много лет назад мы можем написать наш скрипт запуска /etc/rc.local
. После загрузки всех системных служб ваш скрипт будет запущен.
Теперь мы используем systemd, у нас rc.local
больше нет. Systemd запускает службу параллельно. Вы можете написать свой собственный сервис для работы с rc.local`, но не можете гарантировать, что он будет работать после загрузки всех системных сервисов.
Есть ли способ сделать это? Или мы должны использовать Before
и After
в файле службы systemd?
Ответы:
В systemd рекомендуется использовать
Before=
иAfter=
упорядочивать ваши услуги рядом с другими.Но так как вы просили путь без использования
Before
иAfter
, вы можете использовать:который как
man systemd.service
объясняет:источник
/proc/sys/kernel/modules_disabled
для1
в конце процесса загрузкиЭто действительно зависит от вашего определения «загружен». Я полагаю, вы хотите, чтобы он запускался сразу после запуска getty. Для этого вам нужно добавить свой сервис в
/etc/systemd/system/getty.target.wants/
каталог. Вы также должны убедиться, что ваш файл использует код, аналогичный другим службам в этом каталоге. Для запуска пользовательского сервиса при загрузке и завершении работы (просто подает звуковой сигнал моей материнской платы), я использую следующий скрипт в/etc/systemd/system/getty.target.wants/service_name.service
/usr/bin/myinitscript.sh
является исполняемым и имеет шебанг в начале.Обратите внимание, что не все будет запущено в этот момент при загрузке, но это точка, в которой пользователю будет предложено войти в систему.
Хотя это делает использование
Before=
иAfter=
это было для меня гораздо более понятным и на самом деле работает; Я не нашел вышеуказанный ответ достаточно информативным. Это также позволяет вам использовать и то,ExecStart=
и другоеExecStop=
, а не ограничиватьсяType=simple
подобным сервисом.источник
Я не знаком со спецификой или ArchLinux, но вот как управлять systemd в целом.
Ну, по сути, systemd - это набор скриптов в /etc/init.d/, на которые указывают символические ссылки из /etc/rcX.d, где X - номер уровня выполнения. Сами ссылки имеют следующий формат:
где:
Итак, если вы хотите, чтобы ваш скрипт выполнялся последним в последовательности загрузки, вам нужно сделать следующее:
runlevel
ls /etc/rc<target runlevel>.d/
и выберите двузначное число, которое больше, чем любое другое, уже существующее.update-rc.d
для Debian,chkconfig
для Fedora или вручную, создайте символическую ссылку /etc/rc.d/S для вашего сценария инициализации.источник