2016-10-05 2 views
7

Я пытаюсь написать свою собственную (простую) службу systemd, которая делает что-то простое. (Как записывать числа от 1 до 10 в файл, используя сценарий оболочки). Мой служебный файл выглядит следующим образом.Статус systemctl неактивен.

[Unit] 
Description=NandaGopal 
Documentation=https://google.com 
After=multi-user.target 

[Service] 
Type=forking 
RemainAfterExit=yes 
ExecStart=/usr/bin/hello.sh & 

[Install] 
RequiredBy = multi-user.target 

Это мой сценарий оболочки.

#!/usr/bin/env bash 

source /etc/profile 
a=0 
while [ $a -lt 10 ] 
do 
    echo $a >> /var/log//t.txt 
     a=`expr $a + 1` 
done 

По какой-то причине услуга не появляется, а systemctl показывает нижний вывод.

[email protected]:~ >systemctl status -l hello 
* hello.service - NandaGopal 
    Loaded: loaded (/usr/lib/systemd/system/hello.service; disabled; vendor  preset: enabled) 
    Active: inactive (dead) 
    Docs: https://google.com 

Была попытка выяснить, что пошло не так в течение последних 2 дней. Может ли кто-нибудь помочь мне здесь?

С уважением, nandanator

+0

В файле журнала есть что-нибудь в нем? Вы уверены, что можете писать в этом месте? – l0b0

+0

Вы сделали исполняемый файл скриптом 'chmod + x myScript'? Удачи. – shellter

+0

@ l0b0 Да, есть доступ на запись. – nandanator

ответ

6
  • Вы установили Type=Forking, но ваша служба не работает. Попробуйте Type=oneshot
  • У вас есть «&» ваша линия ExecStart, которая не является обязательной.
  • Служба disabled, что означает, что это не было enabled для начала при загрузке. Вы должны запустить systemctl enable hello, чтобы установить его при загрузке.

Вы можете проверить man systemd.directives найти индекс всех директив, которые вы можете использовать в своих unit файлов.

+0

Большое вам спасибо за помощь. [:)] Type = oneshot, и включение systemctl выполнило трюк. Я использовал среду симулятора, и когда я создал символическую ссылку для службы, она работала плавно. :) – nandanator

+0

Спасибо, если мой ответ решил проблему, отметьте ее как принятую. –

1

Несколько точек:

  1. Если вы используете Type=forking, рекомендуется указать PIDFile.

  2. В вашем случае, Type=simple, и ExecStart без & будет работать.

  3. использование systemctl start service-name для запуска службы

  4. Затем используйте systemctl status service-name, чтобы проверить его состояние. статус будет неактивным/мертвым, если служба не запущена.

Смежные вопросы