RUNIT - создан первый сервисный каталог, "sv start testrun" не работает

Я довольно новичок в бегах. Я установил его на хосте Ubuntu.

Что я сделал:

1) создал каталог testrun в /etc/sv

2) создал скрипт run в /etc/sv/testrun/runСодержание скрипта:

#! /bin/bash
exec /root/FP/annotate-output python /root/FP/test.py | logger -t svtest

3) Если я вызываю напрямую /etc/sv/testrun/run, он выполняется успешно

4) Я бегу sv start testrun (или же sv run testrun, sv restart testrun), все они заканчиваются одной и той же ошибкой:

fail: sv: unable to change to service directory: file does not exist

Есть идеи, что я делаю не так? Я новичок в запуске и основываю все мои действия на информации, найденной здесь: http://smarden.org/runit/

2 ответа

Решение

Кажется, что sv контролирует сервисы, которые запускаются и контролируются runit (с помощью runsv). Так как рунит на моей машине фактически не заменяет sysvinitне запускается и не контролирует /services/ который должен содержать символические ссылки на /etc/sv/ каталоги.

Бег runsv /etc/sv/testrun/ кажется, делает ожидаемое поведение runit.

Ваш сервис настроен неправильно. Причина, по которой это сработало, заключается в том, что вы вызывали его непосредственно из определения службы, а не из фактического управления службой.

Когда запускается сервисное управление runit, оно ожидает /service каталог существует, хотя некоторые установки (например, Debian Jessie) в настоящее время имеют его в /etc/service по неизвестным причинам. Сообщение об ошибке приходит из этого отсутствующего каталога, который он пытается изменить, следовательно, unable to change service directory сообщение. Сделайте следующее как root:

mkdir -p /etc/service
cd /
ln -s /etc/service
cd /service
ln -s /etc/sv/testrun

Это будет:

  • создайте каталог службы, если он не существует
  • поместите символическую ссылку в корень, чтобы runvdir мог измениться на /service как его рабочий каталог
  • создает ссылку на ваш testrun обслуживание, если вы определили это в /etc/sv/testrun

runsvdir затем сможет изменить свой каталог в /service найти символическую ссылку для testrun, а затем запустите его. Вы можете проверить это с помощью ps fax или же pstree -A увидеть дерево процессов; должен быть runsv с вашей командой, прикрепленной к нему. Примечание: иногда процессу runvdir может потребоваться секунда или две, чтобы ориентировать его голову, поэтому, если вы смотрите прямо сейчас и не видите его в дереве процесса, подождите 2-3 секунды и повторите попытку, и он должен показать вверх. Похоже, это происходит только при запуске.

Другие вопросы по тегам