autostart i lubuntu

Få hjælp til at sætte programmer eller funktioner op.
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: autostart i lubuntu

Indlæg af AJenbo »

/etc/init er til start af services som køre i baggrunden og kan der for ikke have en brugerflade. startupprogrammer er til automatisk at starte et program under din bruger når du loggerind og kan der for godt have en brugerflade. Hvis din maskine ikke kan nå at starte netværket og serviio servicen inden den logger ind og starter serviio-console.sh kan du vel godt tilføje en simpelt forsinkelt inden kaldet til serviio-console.sh:

Kode: Vælg alt

sleep 10; serviio-console.sh
Det bedste ville dog nok være om du fik lavet noget som venter på at serviio servicen er oppe at køre, jeg tror lidt det var det lath var inde på med han wrapper, det kan både være hurtigere (sæt sleep til 1) og altid den nødvendige forsinkelse for at servicens kan nå at starte først.
Brugeravatar
Toddvarg
Indlæg: 842
Tilmeldt: 19. maj 2007, 19:59
Geografisk sted: Vejle

Re: autostart i lubuntu

Indlæg af Toddvarg »

lath skrev:Hej @Toddvang
Du kan godt lægge en tidsforsinkelse ind

Du laver et wrapper script, som startes med:

Kode: Vælg alt

start on started networking
script
   /<path-to-serviio>/serviio_wrapper.sh
end script[


Først laver du en serviio_wrapper.sh filen (alle kommandoer er med med den sødvanlige sudo foran, hvis stien er uden for din $HOME (hjemmemappe):

Kode: Vælg alt

cd  /<path-to-serviio>/

Kode: Vælg alt

touch ./serviio_wrapper.sh

og den fil åbnes så for skrivning med:

Kode: Vælg alt

gedit ./serviio_wrapper.sh

hvor du skriver:

Kode: Vælg alt

#!/bin/sh
#Herunder er "exec" "kør et program", og "$0" dette scripts filnavn med  den absolutte sti, og "$@" er
#alle argumenter til dette wrapper script,  som vi så senere råkopierer til serviio.sh shell scriptet
exec /bin/bash "$0" -- "$@"

# sleep er en kommando der sover i det antal sekunder man skriver lige efter kommandoens navn : sleep + det
#obligatoriske mellemrumstegn - sleep 10 sover i 10 sekunder
sleep 10

#start serviio. sh shell scriptet
/<path-to-serviio>/serviio.sh "$@"

Husk at gemme scriptet før du lukker ned for editoren.

/Lars



Hvis jeg lager wrapper filen, ville den kunne se sådan ud, hvis den skal starte både serviio.sh og serviio-console.sh med forsinkelse

Kode: Vælg alt

#!/bin/sh
#Herunder er "exec" "kør et program", og "$0" dette scripts filnavn med  den absolutte sti, og "$@" er
#alle argumenter til dette wrapper script,  som vi så senere råkopierer til serviio.sh shell scriptet
exec /bin/bash "$0" -- "$@"

# sleep er en kommando der sover i det antal sekunder man skriver lige efter kommandoens navn : sleep + det
#obligatoriske mellemrumstegn - sleep 10 sover i 10 sekunder
sleep 10

#start serviio. sh shell scriptet
/<path-to-serviio>/serviio.sh "$@"

#start serviio-console. sh shell scriptet med 20 sec forsinkelse
/<path-to-serviio>/serviio-console.sh - 20 "$@"

Det føles som om det er nogen info jeg mangler at sætte ind. Feks hvad skal der stå i stedet for "$@"
Ting tager tid

med venlig hilsen
Tom Oddvar Gundersen
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: autostart i lubuntu

Indlæg af AJenbo »

Hvis serviio.sh ikke forkert service ud som en dæmon så vil dit script ikke kommentere end der til og din consol vil aldrig starte, siden du heller sikke starter programmet som en service vil den heller ikke kunne genstarte sig selv hvis det bliver nødvendigt. Den rigtige løsning er at få det script der starter consolen til at vente på at servicen er startet.
Brugeravatar
Toddvarg
Indlæg: 842
Tilmeldt: 19. maj 2007, 19:59
Geografisk sted: Vejle

Re: autostart i lubuntu

Indlæg af Toddvarg »

AJenbo skrev:Hvis serviio.sh ikke forkert service ud som en dæmon så vil dit script ikke kommentere end der til og din consol vil aldrig starte, siden du heller sikke starter programmet som en service vil den heller ikke kunne genstarte sig selv hvis det bliver nødvendigt. Den rigtige løsning er at få det script der starter consolen til at vente på at servicen er startet.

kan man gøre det ved at starte serviio.sh som der er nu ved /etc/init og lægge start af serviio-console.sh ind i scriptet til serviio.sh?
Jeg kan mærke at min nødvendige viden for at forstå dette er nok for begrænset, så måske ville denne bog var en start til at forstå det bedre http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf
Ting tager tid

med venlig hilsen
Tom Oddvar Gundersen
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: autostart i lubuntu

Indlæg af AJenbo »

Toddvarg skrev:
AJenbo skrev:Hvis serviio.sh ikke forkert service ud som en dæmon så vil dit script ikke kommentere end der til og din consol vil aldrig starte, siden du heller sikke starter programmet som en service vil den heller ikke kunne genstarte sig selv hvis det bliver nødvendigt. Den rigtige løsning er at få det script der starter consolen til at vente på at servicen er startet.

kan man gøre det ved at starte serviio.sh som der er nu ved /etc/init og lægge start af serviio-console.sh ind i scriptet til serviio.sh?

Igen, du kan IKKE starte serviio-console.sh og serviio.sh sammen. Det ene er en service som skal kunne køre permanent og det andet er en bruger flade der kræver et sted at vise brugerfladen, der for kan de ikke køres på samme måde.

Lad fortsat serviio.sh via /etc/init og tilpas serviio-console.sh så den tjekker om servicen er kørrende inden den åbner programmet.
Brugeravatar
Toddvarg
Indlæg: 842
Tilmeldt: 19. maj 2007, 19:59
Geografisk sted: Vejle

Re: autostart i lubuntu

Indlæg af Toddvarg »

AJenbo skrev:Lad fortsat serviio.sh via /etc/init og tilpas serviio-console.sh så den tjekker om servicen er kørrende inden den åbner programmet.

Hvordan laves et sådan script og hvor vil det placeres. Kan man placere det i startup program. Hvis jeg nu kalder den nye fil serviio-console-forsinkelse.sh og dens opgave bliver at checke at serviio.sh kører og derefter starte serviio-console.sh. Jeg antager at serviio-console-forsinkelse.sh kan placeres i samme mappe som serviio.sh og servioo-console.sh.

Hvordan vil en sådan code se ud. Det er nok der jeg er lidt på bar bund.

Eller mener du at man skal gå ind og tilpasse serviio-console.sh direkte og starte den fra startup programmer. Jeg har egentlig ikke overvejet om den måske allerede checker om serviio.sh kører, inden den selv starter op. Uanset, her er koden til serviio-console.sh.

Kode: Vælg alt

#!/bin/sh
### ====================================================================== ###
##                                                                          ##
##  Serviio Console ript                                                    ##
##                                                                          ##
### ====================================================================== ###

DIRNAME=`dirname $0`
PROGNAME=`basename $0`

# OS specific support (must be 'true' or 'false').
cygwin=false;
darwin=false;
linux=false;
case "`uname`" in
    CYGWIN*)
        cygwin=true
        ;;

    Darwin*)
        darwin=true
        ;;
       
    Linux)
        linux=true
        ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
    [ -n "$SERVIIO_CONSOLE_HOME" ] &&
        SERVIIO_CONSOLE_HOME=`cygpath --unix "$SERVIIO_CONSOLE_HOME"`
    [ -n "$JAVA_HOME" ] &&
        JAVA_HOME=`cygpath --unix "$JAVA_HOME"`   
fi

# Setup SERVIIO_CONSOLE_HOME
if [ "x$SERVIIO_CONSOLE_HOME" = "x" ]; then
    # get the full path (without any relative bits)
    SERVIIO_CONSOLE_HOME=`cd $DIRNAME/..; pwd`
fi
export SERVIIO_CONSOLE_HOME

# Setup the JVM
if [ "x$JAVA" = "x" ]; then
    if [ "x$JAVA_HOME" != "x" ]; then
   JAVA="$JAVA_HOME/bin/java"
    else
   JAVA="java"
    fi
fi

# Setup the classpath
SERVIIO_CONSOLE_CLASS_PATH="$SERVIIO_CONSOLE_HOME/lib/*:$SERVIIO_CONSOLE_HOME/config"

# Setup Serviio specific properties
JAVA_OPTS="-Dserviio.home=$SERVIIO_CONSOLE_HOME -Djava.net.preferIPv4Stack=true"

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
    SERVIIO_CONSOLE_HOME=`cygpath --path --windows "$SERVIIO_CONSOLE_HOME"`
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
    SERVIIO_CONSOLE_CLASS_PATH=`cygpath --path --windows "$SERVIIO_CONSOLE_CLASS_PATH"`
fi

# Execute the JVM in the foreground
"$JAVA" -Xms5M -XX:+UseParNewGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 $JAVA_OPTS -classpath "$SERVIIO_CONSOLE_CLASS_PATH" org.serviio.console.ServiioConsole "$@"         

Ting tager tid

med venlig hilsen
Tom Oddvar Gundersen
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: autostart i lubuntu

Indlæg af lath »

Toddvarg skrev:
AJenbo skrev:Lad fortsat serviio.sh via /etc/init og tilpas serviio-console.sh så den tjekker om servicen er kørrende inden den åbner programmet.

Hvordan laves et sådan script og hvor vil det placeres. Kan man placere det i startup program. Hvis jeg nu kalder den nye fil serviio-console-forsinkelse.sh og dens opgave bliver at checke at serviio.sh kører og derefter starte serviio-console.sh. Jeg antager at serviio-console-forsinkelse.sh kan placeres i samme mappe som serviio.sh og servioo-console.sh.

Hvordan vil en sådan code se ud. Det er nok der jeg er lidt på bar bund.

Eller mener du at man skal gå ind og tilpasse serviio-console.sh direkte og starte den fra startup programmer. Jeg har egentlig ikke overvejet om den måske allerede checker om serviio.sh kører, inden den selv starter op. Uanset, her er koden til serviio-console.sh.

Kode: Vælg alt

#!/bin/sh
### ====================================================================== ###
##                                                                          ##
##  Serviio Console ript                                                    ##
##                                                                          ##
### ====================================================================== ###

DIRNAME=`dirname $0`
PROGNAME=`basename $0`

# OS specific support (must be 'true' or 'false').
cygwin=false;
darwin=false;
linux=false;
case "`uname`" in
    CYGWIN*)
        cygwin=true
        ;;

    Darwin*)
        darwin=true
        ;;
       
    Linux)
        linux=true
        ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
    [ -n "$SERVIIO_CONSOLE_HOME" ] &&
        SERVIIO_CONSOLE_HOME=`cygpath --unix "$SERVIIO_CONSOLE_HOME"`
    [ -n "$JAVA_HOME" ] &&
        JAVA_HOME=`cygpath --unix "$JAVA_HOME"`   
fi

# Setup SERVIIO_CONSOLE_HOME
if [ "x$SERVIIO_CONSOLE_HOME" = "x" ]; then
    # get the full path (without any relative bits)
    SERVIIO_CONSOLE_HOME=`cd $DIRNAME/..; pwd`
fi
export SERVIIO_CONSOLE_HOME

# Setup the JVM
if [ "x$JAVA" = "x" ]; then
    if [ "x$JAVA_HOME" != "x" ]; then
   JAVA="$JAVA_HOME/bin/java"
    else
   JAVA="java"
    fi
fi

# Setup the classpath
SERVIIO_CONSOLE_CLASS_PATH="$SERVIIO_CONSOLE_HOME/lib/*:$SERVIIO_CONSOLE_HOME/config"

# Setup Serviio specific properties
JAVA_OPTS="-Dserviio.home=$SERVIIO_CONSOLE_HOME -Djava.net.preferIPv4Stack=true"

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
    SERVIIO_CONSOLE_HOME=`cygpath --path --windows "$SERVIIO_CONSOLE_HOME"`
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
    SERVIIO_CONSOLE_CLASS_PATH=`cygpath --path --windows "$SERVIIO_CONSOLE_CLASS_PATH"`
fi

# Execute the JVM in the foreground
"$JAVA" -Xms5M -XX:+UseParNewGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 $JAVA_OPTS -classpath "$SERVIIO_CONSOLE_CLASS_PATH" org.serviio.console.ServiioConsole "$@"         


Selve serviio-console.sh scriptet tjekker ikke om serviio kører, men det gør Java programmet som scriptet starter helt sikkert.
Du skal altså have en JRE (Java Runtime Enviroment) installeret før org.serviio.console.ServiioConsole Java programmet kan virke.

Fra java.net.preferIPv4Stack=true kan jeg også se at du muligvis kan få problemer, hvis du har aktiveret firewallen, sådan at der blokeres for trafik til services på localhost.
Localhost er hostnavnet for IP adressen 127.0.0.1, der er IP adressen til computeren selv.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Brugeravatar
Toddvarg
Indlæg: 842
Tilmeldt: 19. maj 2007, 19:59
Geografisk sted: Vejle

Re: autostart i lubuntu

Indlæg af Toddvarg »

lath skrev:
Toddvarg skrev:
AJenbo skrev:Lad fortsat serviio.sh via /etc/init og tilpas serviio-console.sh så den tjekker om servicen er kørrende inden den åbner programmet.

Hvordan laves et sådan script og hvor vil det placeres. Kan man placere det i startup program. Hvis jeg nu kalder den nye fil serviio-console-forsinkelse.sh og dens opgave bliver at checke at serviio.sh kører og derefter starte serviio-console.sh. Jeg antager at serviio-console-forsinkelse.sh kan placeres i samme mappe som serviio.sh og servioo-console.sh.

Hvordan vil en sådan code se ud. Det er nok der jeg er lidt på bar bund.

Eller mener du at man skal gå ind og tilpasse serviio-console.sh direkte og starte den fra startup programmer. Jeg har egentlig ikke overvejet om den måske allerede checker om serviio.sh kører, inden den selv starter op. Uanset, her er koden til serviio-console.sh.

Kode: Vælg alt

#!/bin/sh
### ====================================================================== ###
##                                                                          ##
##  Serviio Console ript                                                    ##
##                                                                          ##
### ====================================================================== ###

DIRNAME=`dirname $0`
PROGNAME=`basename $0`

# OS specific support (must be 'true' or 'false').
cygwin=false;
darwin=false;
linux=false;
case "`uname`" in
    CYGWIN*)
        cygwin=true
        ;;

    Darwin*)
        darwin=true
        ;;
       
    Linux)
        linux=true
        ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
    [ -n "$SERVIIO_CONSOLE_HOME" ] &&
        SERVIIO_CONSOLE_HOME=`cygpath --unix "$SERVIIO_CONSOLE_HOME"`
    [ -n "$JAVA_HOME" ] &&
        JAVA_HOME=`cygpath --unix "$JAVA_HOME"`   
fi

# Setup SERVIIO_CONSOLE_HOME
if [ "x$SERVIIO_CONSOLE_HOME" = "x" ]; then
    # get the full path (without any relative bits)
    SERVIIO_CONSOLE_HOME=`cd $DIRNAME/..; pwd`
fi
export SERVIIO_CONSOLE_HOME

# Setup the JVM
if [ "x$JAVA" = "x" ]; then
    if [ "x$JAVA_HOME" != "x" ]; then
   JAVA="$JAVA_HOME/bin/java"
    else
   JAVA="java"
    fi
fi

# Setup the classpath
SERVIIO_CONSOLE_CLASS_PATH="$SERVIIO_CONSOLE_HOME/lib/*:$SERVIIO_CONSOLE_HOME/config"

# Setup Serviio specific properties
JAVA_OPTS="-Dserviio.home=$SERVIIO_CONSOLE_HOME -Djava.net.preferIPv4Stack=true"

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
    SERVIIO_CONSOLE_HOME=`cygpath --path --windows "$SERVIIO_CONSOLE_HOME"`
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
    SERVIIO_CONSOLE_CLASS_PATH=`cygpath --path --windows "$SERVIIO_CONSOLE_CLASS_PATH"`
fi

# Execute the JVM in the foreground
"$JAVA" -Xms5M -XX:+UseParNewGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 $JAVA_OPTS -classpath "$SERVIIO_CONSOLE_CLASS_PATH" org.serviio.console.ServiioConsole "$@"         


Selve serviio-console.sh scriptet tjekker ikke om serviio kører, men det gør Java programmet som scriptet starter helt sikkert.
Du skal altså have en JRE (Java Runtime Enviroment) installeret før org.serviio.console.ServiioConsole Java programmet kan virke.

Fra java.net.preferIPv4Stack=true kan jeg også se at du muligvis kan få problemer, hvis du har aktiveret firewallen, sådan at der blokeres for trafik til services på localhost.
Localhost er hostnavnet for IP adressen 127.0.0.1, der er IP adressen til computeren selv.

/Lars


Alt dette fungere fint, og start af serviio.sh og serviio-console.sh fungere pt som det skal. Og det virker som om start af serviio.sh er hurtig nok, når den starter gennem etc/init og serviio-console.sh starter gennem startup programmer. Måske er det ikke nødvændigt at lede efter en bedre måde at gøre det på. Hvis jeg skal gøre det, så krever det, for min del en større indsigt i hvordan man skriver programmer.

Måske skal man følge tankegangen "if something is not broken, don't try to fix it". Dog har jeg fået en større forståelse af hvad der fungere eller ikke, så tak til både AJenbo og Lath for alle indput.
Ting tager tid

med venlig hilsen
Tom Oddvar Gundersen