не вдалося запустити службу


16

Я створив системну службу:

[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і тепер він не дає мені жодних повідомлень, але сервіс все ще не запускається.


10
Чи запустили ви systemctl daemon-reloadпісля створення свого одиничного файлу?
Wieland

@Wieland: Хм..Зараз це не показує мені жодних повідомлень. Але це все ще не запускається.
Джордж

@don_crissti: Статус говорить, що він активний, але сценарій (у ExecStart) не виконується.
Джордж

як це знати належний $ HOME? Що ви очікуєте від системної служби?
Серж

@ Серж: Хм..Так, як я можу використовувати $ HOME?
Джордж

Відповіді:


14

$HOMEвказує на домашній каталог користувача, який виконує сценарій. Служби Systemd запускаються з root, тому це, ймовірно, буде намагатися /root/theFolder/run.sh. Використовуйте абсолютні шляхи в сервісних файлах.

У вас також є forkingнабір опцій. Це потрібно для програми, яка працює на сам фон, чи робить це ваш сценарій? Більшість це не так, і якщо ваше це не так, ви повинні вилучити цю опцію, або systemd буде чекати, коли ваш сценарій закінчить, і вимагатиме його як розпочатого.

Також системні файли сервісних служб, які вказують на сценарії у вашому домашньому каталозі, не перешкоджають, і, можливо, це стосується безпеки. Оскільки вони виконуються як root, кожен, хто може змінити їх, може потенційно отримати кореневий доступ до вашого комп'ютера. Набагато краще скопіювати скрипт /usr/local/binі переконатися, що він є власником і тільки в корінному режимі, щоб припинити це. Це також гарна ідея , щоб запустити сценарій як звичайний користувач , використовуючи User=і Group=опцію у файлі служби.

Якщо ви хочете запустити його як свого користувача, краще покласти службовий файл ~/.config/systemd/user/і запустити / увімкнути його systemctl --user enable yourservice && systemctl --user start yourservice(зауважте, запускайте так, як ваш користувач не має root). Дивіться це для отримання додаткової інформації про файли обслуговування користувачів.


: Я поміщаю скрипт у / usr / local / bin, а сервіс - у /.config/systemd/user.Якщо я спробую увімкнути сервіс, він показує мені "зайві аргументи". Якщо я спробую використовувати systemctl, він показує "не вдалося .. одиниця .. ', щось подібне.
Джордж

Чи можете ви надати повну перевірену вами команду та більш детальні журнали. Його важко налагодити за допомогою фрагментів.
Майкл Даффін

: Чи є рішення використовувати шлях $ HOME? Тому що, якщо я поміщаю скрипт в / usr / local / bin, він використовує відносні шляхи до $ HOME.Я бачив це. І я намагався поставити HOME=$HOMEв перший файл середовища. Але сервіс не вдалося запустити, помилок не було.
Джордж

1
в ubuntu мені довелося використовувати systemctl для цього не systemd, використовуючи systemd, я отримав помилку "Надмірні аргументи"
Олександр Міллз

1
@AlexanderMills Ви маєте рацію, правильна команда в systemctl і systemd була лише помилковою помилкою у відповіді.
Майкл Даффін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.