Homepage Wiki Forum Buy

Anwendung automatisch starten

Aus GNUBLIN

Inhaltsverzeichnis

Für Anfänger

Möchte man eine Anwendung automatisch starten wenn das Betriebssystem bootet, braucht man dazu nicht viel. Es reicht ein einfaches Start/Stop Script für fast jeden Zweck.

Eigenes Script

Beispiel: LED automatisch blinken lassen

Wir erklären hier anhand eines einfachen Beispiels, wie man ein solches Script anlegt und wie dieses aufgebaut ist.

Wir wollen, dass automatisch die LED1 auf dem Gnublin Board anfängt zu blinken. Das Blink-Programm gibt es bereits unter examples/misc/gpio/blink.sh.

Als erstes legt man ein Script an, am besten mit dem nano Texteditor:

root@gnublin:~# nano /etc/init.d/LEDautoblink

In das Script schreibt man folgendes:

  1. #! /bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides:          Laesst die LED1 blinken
  4. # Required-Start:    
  5. # Required-Stop:     
  6. # Default-Start:     2 3 4 5
  7. # Default-Stop:      0 1 6
  8. # Short-Description: LED auto blink
  9. # Description:       LED auto blink
  10. ### END INIT INFO
  11. # Author: Name <email@domain.tld>
  12.  
  13. # Aktionen
  14. case "$1" in
  15.     start)
  16.         echo "LED blink start"
  17.         /root/examples/misc/gpio/blink.sh > /dev/null &
  18.         echo $! > /var/run/blink.pid
  19.         ;;
  20.     stop)
  21.         echo "LED blink stop"
  22.         if [ -e /var/run/blink.pid ]
  23.         then
  24.             if ( kill -TERM $(cat /var/run/blink.pid) 2> /dev/null )
  25.             then
  26.                 c=1
  27.                 while [ "$c" -le 30 ]; do
  28.                   if ( kill -0 $(cat /var/run/blink.pid) 2> /dev/null )
  29.                   then
  30.                       sleep 1
  31.                   else
  32.                       break
  33.                   fi
  34.                   c=$((++c))
  35.                 done
  36.              fi
  37.              if ( kill -0 $(cat /var/run/blink.pid) 2> /dev/null )
  38.              then
  39.                  kill -KILL $(cat /var/run/blink.pid)
  40.              fi
  41.         fi
  42.         rm /var/run/blink.pid
  43.         ;;
  44. esac
  45.  
  46. exit 0

Ist dies gemacht, machen wir die Datei noch ausführbar:

root@gnublin:~# chmod +x /etc/init.d/LEDautoblink

Danach führen wir

root@gnublin:~# update-rc.d LEDautoblink defaults

aus. Nun sollte unser Programm nach einem reboot automatisch starten und die LED1 auf dem GNUBLIN Board blinken!

Das Script etwas genauer erklärt

Der Kommentarblock von Zeile 2-11 ist wichtig und sollte nicht gelöscht werden. Dieser wird bei

root@gnublin:~# update-rc.d LEDautoblink defaults

eingelesen.

Es folgen dann nach start) die Befehle, die beim Start ausgeführt werden. Das "&" bei

 /root/examples/misc/gpio/blink.sh > /dev/null &

in Zeile 17 sorgt dafür, dass der bootvorgang nicht hängen bleibt und weitere befehle ausgeführt werden können. In Zeile 18 wird dann die Prozess ID in die Datei blink.pid im Verzeichnis /var/run/ gespeichert. Diese Datei brauchen wir dann später, wenn der Dienst gestoppt werden soll.

Das stoppen passiert in den Zeilen 20 bis 42. Zunächst wird in Zeile 22 überprüft ob die Datei mit der Prozess ID vorhanden ist. Danach wird in Zeile 24 ein kill befehl an das Programm geschickt. Danach wird in einer Schleife (Zeile 27-35) 30 mal geprüft, ob das Programm beendet wurde. Wurde das Programm nach dem 30. durchlauf immer noch nicht beendet, wird das Programm in Zeile 39 mit

 kill -KILL $(cat /var/run/blink.pid)

beendet. In Zeile 42 wird die angelegte Prozess ID Datei noch gelöscht.

Programm zur Laufzeit starten/stoppen

Man kann das Programm auch zur Laufzeit stoppen/neustarten. Das geht ganz einfach per:

root@gnublin:~# /etc/init.d/LEDautoblink stop

gefolgt von:

root@gnublin:~# /etc/init.d/LEDautoblink start

Hier werden einfach die Befehle ausgeführt, die wir vorhin im Script unter den jeweiligen punkten

    start)
        echo "script start"
        /opt/beispiel start
        ;;
    stop)
        echo "script stop"
        /opt/beispiel stop
        ;;

eingefügt haben.

Programm aus autostart entfernen

Das Programm lässt sich ganz einfach mit einem Befehl entfernen. In unserem Fall passiert das mit

root@gnublin:~# update-rc.d -f LEDautoblink remove

Für Fortgeschrittene

Für Linux-Cracks möglicherweise offensichtlich, für andere nicht: eine so gestartete Anwendung kann zwar Konsolenausgaben (stdout) machen, erhält aber keine Tastatureingaben. Wer das benötigt, ist mit der Kombination Automatisches_Einloggen_bei_Gnublin und Autostart per .bashrc (siehe z.B. http://forum.de.selfhtml.org/archiv/2004/4/t78601/) besser beraten.

Achtung: für Applikationen ohne Tastatursteuerung sollte man einen Weg vorsehen, wie das Linux sauber heruntergefahren wird. Abschalten der Stromversorgung oder ein Reset können sonst das Dateisystem beschädigen. Es bietet sich z.B. an, den Taster an gpio15 regelmäßig abzufragen und daraufhin ein 'halt' auszuführen.


Mögliche Probleme

Nach einem

root@gnublin:~# reboot

könnte auf ein fehlendes "libpcsclite1" hingewiesen werden. In diesem Fall ist es nötig sich das nötige Package

  • libpcsclite1 [1]

und zu laden nach der Anleitung

anschließend sollte auch dieses Script automatisch starten und die Verbindung mit dem Internet herstellen.

Literaturnachweise

In anderen Sprachen