Mudando do Amazon Linun para o ubuntu, agora meu script de inicialização não está funcionando.

1

Estamos na fase de testes da migração do Amazon Linux para o Ubuntu para alguns de nossos servidores. Temos um aplicativo mono que é executado como um serviço e na caixa amazon linux correu bem. Eu sei que algumas coisas são diferentes com os serviços entre os dois sistemas operacionais. Por exemplo, no Amazon Linux, a biblioteca de funções de origem está em um local diferente.

Eu não escrevi este aplicativo ou o script de inicialização, é apenas meu trabalho para que ele funcione agora.
Você pode me ajudar a obter este script funcionando sem problemas?
Aqui está o meu script

#!/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

atualmente quando eu corro service wowza2s3 start retorna

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 

embora ele inicie o aplicativo e funcione como pretendido.

service wowza2s3 stop não retorna nada e não para o processo

service wowza2s3 status retorna

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

Obrigado

    
por Greyhammer 24.03.2016 / 21:58

2 respostas

0

O que acabei fazendo foi reescrever este script usando o sistema inicial.

Seguindo um guia aqui

Aqui está o meu código. Muito direto para eu entender.

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
    
por Greyhammer 28.03.2016 / 16:58
0

Você menciona três erros. Os dois primeiros são bastante simples:

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

Os comandos success e failure não são padrão. Eles são, presumivelmente, algum tipo de coisa específica do Amazon Linux. No entanto, com base no contexto, posso fazer um palpite sobre o que eles devem fazer:

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

Isso significa "executar um comando e, em seguida, executar success se funcionou e failure se não funcionou. Eu não tenho idéia porque alguém escolheria uma maneira tão complicada de escrever isso. Tanto quanto eu posso dizer , essa linha é equivalente a:

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

Presumivelmente, os programas success e failure retornam simplesmente um valor de saída 0 (êxito) e não 0 ( failure ). O shell faz isso de qualquer maneira, e é por isso que a linha acima deve ser a mesma. Tanto faz. Se você realmente precisa chamar um programa externo para isso, use os shell internos true e false :

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

O próximo erro é mais difícil de entender. O programa status é apenas um link simbólico para /sbin/initctl . A versão de initctl no Ubuntu não possui a opção -p . Eu não fui capaz de encontrar o manual de qualquer initctl é usado no Amazon Linux. Presumivelmente, se você puder encontrá-lo, você pode verificar o que a opção -p faz e descobrir o equivalente no initctl do Ubuntu.

    
por terdon 25.03.2016 / 14:53