Назад | Перейти на главную страницу

Linux: как передать параметры в `service foo start` (в командной строке)?

Я хочу передать аргумент запускаемой мной службе. Например. запуск сервера в режиме отладки. Подобно,

service jboss-as start debug

Или такой. Но service похоже, не поддерживает это.

Есть какой-нибудь способ? (Для RHEL 6, если это имеет значение.)

Примечание: это похоже на Ubuntu / Linux: как обычно определяются параметры запуска для сценариев запуска (sysvinit)? но не то же самое.

В RHEL у вас есть папка / etc / sysconfig. Здесь вы определяете параметры запуска. И в свой сценарий запуска вы включаете что-то вроде:

if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi

Посмотрите существующие сервисы на примерах.

Для разработки вы можете поместить свои параметры запуска в экспортированную переменную (например, в .bashrc), которую вы можете вручную переопределить в любое время.

РЕДАКТИРОВАТЬ

Если вы действительно хотите использовать service есть еще несколько вариантов.

Ваш скрипт должен поддерживать как минимум start и stop. Но вы также можете реализовать debug команда. И начните свою программу с:

service foo debug

Другой способ - проверить второй аргумент в вашем скрипте, и вы запустите свою программу с:

service foo start debug

Измените свой сценарий инициализации примерно так:

case "$1" in
  start)
        if [ "$2" = "debug" ]
        then
                start_debug
        else
                start
        fi
        ;;

В Ubuntu параметры запуска обычно находятся в:

/etc/default/<service_name>

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

Не люблю добавлять дополнительные опции в автозагрузку сервиса.

Вы можете настроить EnvironmentFile в вашем служебном файле:

[Service]
EnvironmentFile=/etc/sysconfig/my-service
ExecStart=my-service.sh ${ARG1} ${ARG2}

и создать /etc/sysconfig/my-service с варами:

ARG1=first
ARG2=second