Пользовательский сценарий демона: работы, но не работает при начальной загрузке / запуск

это - Индивидуалист Ubuntu 10.10.

У меня есть следующий сценарий оболочки в init.d, который я хочу выполнить как "демон" (фоновый сервис с запускаются/останавливают/перезапускают действительно) при системном запуске. В rc3.d существует символьная ссылка. Я попробовал 4 и 5 также. (Идеально это инициализировало бы, прежде чем графический вход в систему происходит и прежде чем пользователь войдет в систему.)

ВАЖНЫЙ: работы сценария 100% как ожидалось и требуемый при тестировании этого с сервисом MetaLeapDaemon запускаются и сервисная остановка MetaLeapDaemon. (Этот сценарий оболочки называет программу Python, которая удостоверяется, что соответствующие .pid файлы и созданы при запуске и удалены в выходе.)

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

Как Вы видите (отсутствием какого-либо uid:gid args в командах start-stop-daemon), это в настоящее время работало бы только под корнем, это запрещается в установке по умолчанию?

Вот сценарий, в значительной степени Ваш run-off-the-mill сценарий демона действительно:

#! /bin/sh

DAEMON=/opt/metaleap/_core/daemon/MetaLeapDaemon.py
NAME=MetaLeapDaemon
DESC="MetaLeapDaemon"

test -f $DAEMON || exit 0

set -e

case "$1" in
    start)
        start-stop-daemon --start --pidfile /var/run/$NAME.pid --exec $DAEMON
        ;;
    stop)
        start-stop-daemon --stop --pidfile /var/run/$NAME.pid
        ;;
    restart)
        start-stop-daemon --stop --pidfile /var/run/$NAME.pid
        sleep 1
        start-stop-daemon --start --pidfile /var/run/$NAME.pid --exec $DAEMON
        ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0
2
задан 11 April 2011 в 23:12

2 ответа

Я отвечаю на это для полноты, даже если вы уже пошли на работу в Upstart (и что - это путь, я не предлагаю вам вернуться) .... [[ 112]

Я думаю, что ключевым моментом, который ты пропустил в первый раз, был уровень запуска. Я догадываюсь, что вы привыкли к RPM-дистрибутивам, где обычно используется уровень запуска 3 для многопользовательского режима и уровень запуска 5 для графического интерфейса?

В Debian и Ubuntu на самом деле есть только один пользователь (1) и многопользовательский (с GUI, если установлен). И многопользовательский - уровень запуска 2. Таким образом, ваши символические ссылки потерпели неудачу, потому что вы никогда не доходили до RL 3.

Использование команды update-rc.d упрощает управление символическими ссылками.

В любом случае, я пишу это для всех, кому это может понадобиться. Хотя я бы посоветовал им конвертировать скрипт в Upstart!

0
ответ дан 11 April 2011 в 23:12

Используйте следующую команду для запуска вашего скрипта при запуске.

Добавьте его в автозагрузку приложений.

sudo -u USERNAME COMMAND

Кстати, кто-то сказал мне использовать NOPASSWORD, иначе он не будет работать:

Вам лучше запустить sudo visudo, чтобы отредактировать файл / etc / sudoers и добавить NOPASSWD для команды вместо записи пароля в сценарии. - Лекенштейн

Надеюсь, это помогло вам,

Даниил

0
ответ дан 11 April 2011 в 23:12

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

Похожие вопросы: