Я новичок в runit. Я установил его на хосте 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
Есть идеи, что я делаю не так? Я новичок в runit и основываю все свои действия на информации, найденной здесь: http://smarden.org/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
Это будет:
/service
как его рабочий каталогtestrun
сервис, если вы определили его в /etc/sv/testrun
runsvdir
затем сможет изменить свой каталог на /service
, найдите свою символическую ссылку для testrun
, а затем запустите его. Вы можете проверить это, используя ps fax
или pstree -A
чтобы увидеть дерево процессов; должен быть runsv
с прикрепленной к нему вашей командой. Примечание: иногда процессу runvdir может потребоваться секунда или две для ориентации головы, поэтому, если вы сразу посмотрите и не увидите его в дереве процессов, подождите 2-3 секунды и повторите попытку, и он должен отобразить вверх. Кажется, это происходит только при запуске.
Кажется, что sv
контролирует службы, которые запускаются и контролируются runit
(с помощью runsv
). Поскольку runit на моей машине фактически не заменяет sysvinit
, он не запускается и не контролирует /services/
который должен содержать символические ссылки на /etc/sv/
каталоги.
Бег runsv /etc/sv/testrun/
похоже, выполняет ожидаемое поведение runit.