Я создал сервис systemd:
[Unit]
Description=My service
[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=mine.service
Я поместил его в папку / etc / systemd / system и назвал его mine.service.
Если я бегу, sudo service mine start
это дает мне:
Не удалось запустить mine.service.Unit mine.service не найдено
--- ОБНОВИТЬ -----
Я запускаю первым, sudo systemctl daemon-reload
и теперь он не дает мне никаких сообщений, но служба все еще не запускается.
systemctl daemon-reload
после создания файла модуля?Ответы:
$HOME
указывает на домашний каталог пользователя, который запускает скрипт. Сервисы Systemd запускаются с правами root, поэтому он, скорее всего, попытается/root/theFolder/run.sh
. Используйте абсолютные пути в служебных файлах.У вас также есть
forking
набор параметров. Это необходимо для программы, которая сама работает в фоновом режиме, это делает ваш скрипт? Большинство из них этого не делает, и если у вас нет, вы должны удалить эту опцию, иначе systemd будет ждать завершения сценария, чтобы запросить его как запущенный.Кроме того, файлы системной службы, которые указывают на сценарии в вашем домашнем каталоге, не рекомендуется и, возможно, представляют угрозу безопасности. Поскольку они запускаются с правами root, любой, кто может их изменить, потенциально может получить root-доступ к вашему компьютеру. Гораздо лучше скопировать скрипт
/usr/local/bin
и убедиться, что он принадлежит и доступен для записи только пользователю root, чтобы остановить это. Также рекомендуется запускать сценарий как непривилегированный пользователь, используя параметрыUser=
иGroup=
в служебном файле.Если вы хотите запустить его от имени пользователя, лучше поместить служебный файл
~/.config/systemd/user/
и запустить / включить его с помощьюsystemctl --user enable yourservice && systemctl --user start yourservice
(обратите внимание, запускать от имени пользователя, а не пользователя root). Смотрите это для получения дополнительной информации о пользовательских файлах обслуживания.источник
HOME=$HOME
первый файл среды. Но служба не может запуститься, ошибок нет.