$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). Смотрите это для получения дополнительной информации о пользовательских файлах обслуживания.
systemctl daemon-reload
после создания файла модуля?