Переходя от Amazon Linun к Ubuntu, теперь мой скрипт инициализации не работает.

Мы находимся на стадии тестирования перехода с Amazon на Linux на Ubuntu для некоторых наших серверов. У нас есть моно-приложение, которое запускается как сервис, и на amazon linux box оно работает нормально. Я знаю, что с сервисами между двумя ОС некоторые вещи различаются. Например, в Amazon Linux библиотека исходных функций находится в другом месте.

Я не писал это приложение или сценарий инициализации, это просто моя работа, чтобы заставить его работать сейчас.
Можете ли вы помочь мне заставить этот сценарий работать гладко?
Вот мой сценарий

#!/bin/bash
# /etc/init.d/wowza2s3

#source function library for Amazon Linux 
#. /etc/rc.d/init.d/functions 

#source function library for Ubuntu
. /lib/lsb/init-functions

RETVAL=0
prog=wowza2s3
lockfile=/var/lock/subsys/$prog

MONO=/usr/bin/mono
EXE=/usr/local/WOWZAtoS3/WOWZAtoS3.exe
PID_FILE=/var/run/wowza2s3.pid

start()
{
        echo -n $"Starting $prog: "
    (exec $MONO $EXE & echo $! >> "$PID_FILE") && success || failure
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch $lockfile
        echo
        return $RETVAL
}
stop()
{
        if [ ! -f "$PID_FILE" ]; then
                action $"Stopping $prog: " /bin/true
                return 0
        fi
        PID=`cat "$PID_FILE"`
        if [ -n "$PID" ]; then
                /bin/kill "$PID" >/dev/null 2>&1
                RETVAL=$?
                if [ $RETVAL -ne 0 ]; then
                        RETVAL=1
                        action $"Stopping $prog: " /bin/false
                else
                        action $"Stopping $prog: " /bin/true
                fi
        else
                 # failed to read pidfile
                action $"Stopping $prog: " /bin/false
                RETVAL=4
        fi

        if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then
            trap '' TERM
            killall $prog 2>/dev/null
            trap TERM
        fi
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        rm -f "$PID_FILE"
        return $RETVAL
}
restart() {
    stop
    start
}
force_reload() {
    restart
}

rh_status() {
        status -p $PID_FILE mono
}

rh_status_q() {
        rh_status >/dev/null 2>&1
}


case "$1" in
        start)
                rh_status_q && exit 0
                start
                ;;
        stop)
                if ! rh_status_q; then
                        rm -f $lockfile
                        exit 0
                fi
                stop
                ;;
        restart)
                restart
                ;;
    force_reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
esac
exit $RETVAL

в настоящее время, когда я запускаю service wowza2s3 start, он возвращает

root@ip-10-0-1-10:~# service wowza2s3 start
Starting wowza2s3: /etc/init.d/wowza2s3: line 20: success: command not found
/etc/init.d/wowza2s3: line 20: failure: command not found 

, хотя он и делает Запустите приложение, и оно работает как задумано.

service wowza2s3 stop ничего не возвращает и не останавливает процесс

service wowza2s3 status возвращает

root@ip-10-0-1-10:~# service wowza2s3 status
status: invalid option: -p
Try `status --help' for more information.

Спасибо

1
задан 24 March 2016 в 23:58

2 ответа

То, что я закончил тем, что делал, переписывало этот сценарий с помощью новомодной системы.

После руководства здесь

Вот мой код. Очень прямой, чтобы я понял.

description "Wowza to S3 service: copies videos to S3 and updating SQL DB records accordingly. WOWZAtoS3 is written in mono by DevUserName"
author "Greyhammer"

start on filesystem or runlevel [2345]
stop on shutdown


script

    export MONO="/usr/bin/mono"
    export EXE="/usr/local/WOWZAtoS3/WOWZAtoS3.exe"
    echo $ > /var/run/wowza2s3.pid
    exec $MONO $EXE

end script

pre-start script
    echo "[`date`] WOWZAtoS3 Starting" >> /var/log/wowza2s3.log
end script

pre-stop script
    rm /var/run/wowza2s3.pid
    echo "[`date`] WOWZAtoS3 Stopping" >> /var/log/wowza2s3.log
end script
0
ответ дан 25 March 2016 в 09:58
  • 1
    Как только Вы устанавливаете blueman, Параметры настройки системы для Bluetooth работали. Так, когда Вы вводите в ' blue' в Поиске поля файлов Вы будете видеть два значка Bluetooth: менеджер и те от системы. 1. Открываете Manager и ' Включите Bluetooth' 2. Открываете другой значок, от параметров настройки системы, и включаете Bluetooth; также включите видимость. Они - два отдельных ползунка для перемещения на том же экране. – mindtab 30 June 2017 в 06:13

Вы упоминаете три ошибки. Первые два достаточно просты:

Starting wowza2s3: /etc/init.d/wowza2s3: line 20: success: command not found
/etc/init.d/wowza2s3: line 20: failure: command not found 

success и failure команды не являются стандартными. Они - по-видимому, своего рода Linux Amazon определенная вещь. Однако на основе контекста, я могу высказать образованное предположение о том, что они, как предполагается, делают:

(exec $MONO $EXE & echo $! >> "$PID_FILE") && success || failure

Это означает, "выполняет команду и затем выполненный success если это работало и failure если это не сделало. Я понятия не имею, почему любой выбрал бы такой замысловатый способ записать это. Насколько я могу сказать, что строка эквивалентна:

(exec $MONO $EXE & echo $! >> "$PID_FILE")

По-видимому, success и failure программы просто возвращают a 0 (успех) и не -0 (failure) значение выхода. Оболочка делает это так или иначе, хотя, который является, почему строка выше должна быть тем же.Без разницы. Если действительно необходимо назвать внешнюю программу для этого, используйте оболочку builtins true и false:

(exec $MONO $EXE & echo $! >> "$PID_FILE") && true || false

Следующую ошибку более трудно понять. status программа является просто символьной ссылкой на /sbin/initctl. Версия initctl на Ubuntu не имеет a -p опция. Я не смог найти руководство что initctl используется на Amazon Linux. По-видимому, если можно найти его, можно проверить что -p опция делает и выясняет эквивалент в Ubuntu initctl.

0
ответ дан 25 March 2016 в 09:58
  • 1
    Я устанавливаю blueman, но это не работает. Тем не менее это не обнаруживает устройства – Satyam Mishra 30 June 2017 в 00:43

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

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