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 секунды и повторите попытку, и он должен показать вверх. Похоже, это происходит только при запуске.