init Script



  • Hi,

    ich habe mir für meine Programme ein init-Shell-Script geschrieben (Greenhorn)
    Das Script startet mehrere Programme hintereinander.
    Wie kann ich aber die Programme (mit Parameter) über eine Liste übergeben und dann per Schleife starten und stoppen. Das Script habe ich eigentlich nur für meine Zwecke modifiziert.

    [code]
    #! /bin/sh

    # Author: Ich

    ### BEGIN INIT INFO
    # Provides: visual
    # Required-Start: $remote_fs $syslog
    # X-UnitedLinux-Should-Start: setserial hotplug
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 3 5
    # Default-Stop: 0 1 6
    # Description: starting and stopping the visual Daemon
    ### END INIT INFO

    prog_1=/srv/www/htdocs/data/variablen
    prog_2=/srv/www/htdocs/diagramm/save_data
    prog_3=/srv/www/htdocs/kWh/kwh_zaehler

    test -x $prog_1 || exit 5
    test -x $prog_2 || exit 5
    test -x $prog_3 || exit 5

    . /etc/rc.status
    rc_reset

    case "$1" in
    start)
    echo "Starting visual"

    echo -n "Starting $prog_1"
    startproc $prog_1
    rc_status -v

    echo -n "Starting $prog_2"
    startproc $prog_2
    rc_status -v

    echo -n "Starting $prog_3"
    startproc $prog_3
    rc_status -v
    ;;
    stop)
    echo "Shutting down visual "
    echo -n "Shutting down $prog_1"
    killproc -TERM $prog_1
    rc_status -v

    echo -n "Shutting down $prog_2"
    killproc -TERM $prog_2
    rc_status -v

    echo -n "Shutting down $prog_3"
    killproc -TERM $prog_3
    rc_status -v
    ;;
    try-restart)
    $0 status >/dev/null && $0 restart
    rc_status
    ;;
    restart)
    $0 stop
    sleep 1
    $0 start
    rc_status
    ;;
    status)
    echo "Checking for visual: "
    echo -n "Checking for $prog_1: "
    checkproc $prog_1
    rc_status -v

    echo -n "Checking for $prog_2: "
    checkproc $prog_2
    rc_status -v

    echo -n "Checking for $prog_3: "
    checkproc $prog_3
    rc_status -v
    ;;
    😉
    echo "Usage: $0 {start|stop|try-restart|restart|status}"
    exit 1
    ;;
    esac
    rc_exit

    Ist nicht ganz edel... naja 😃

    Danke
    worst_case



  • Versuch's mal so:

    #!/bin/sh
    
    while [ $# -gt 0 ]; do
      $1
      shift
    done
    

    Aufruf:

    my_init prog1 "prog2 arg1 arg2" prog3 ...
    

    (Hab' ich nicht getestet, müsste aber vom Ansatz her funktionieren.)

    Martin



  • Hi Martin,

    was bedeutet

    Code: ...

    Danke
    worst_case



  • Das soll der Aufruf des Skriptes in der Kommandozeile sein! "..." heißt hier: und so weiter.
    (Das "Code:" wird von dem Tag automatisch eingeblendet, vergiss es einfach.)



  • Hi Martin,

    ich glaube ich habe mich etwas falsch ausgedrückt.
    Das Script an sich funkt.

    Nur muss ich für jedes Programm das ich starte das Script komplett verändern.
    Ich möchte so eine Art Liste habe die dann per Schleife abgearbeitet wird.

    Liste =(/srv/...prog_1 , /srv/..prog_2, usw)

    for @liste

    und dann verliesen sie ihn 😃

    worst_case



  • Abend,

    ich hab jetzt mein script so am laufen.
    ich erzeuge eine liste mit pfad und programmnamen

    programm = "/bin/...prog1 /srv/www/prog2 usw"

    bei jedem leerzeichen ist der block zu ende. jedoch wie kann ich ein prog mit parametern starten
    z.B.

    programm = "/bin/hallo -f -o /srv/www/prog2 usw"

    jetzt erkennt er einfach bei jedem blank einen neuen block.
    wie kann ich das verhindern ?

    Danke
    worst_case


Anmelden zum Antworten