automount und starten eines scriptes

kai_001

Well-Known Member
Hi,

amd funzt bei mir super (FreeBSD 6.3). Wie kann ich aber weiterführend beim einlegen einer CD/DVD ein Script anstoßen? Einfach hinter den mount Eintrag && script.sh? Oder geht dass auch anders?

Bei PCBSD kommt zum Beispiel dieser Dialog, was man machen möchte ... kann man dass irgendwie portieren

Danke und viele Grüße
Kai
 
Zum automatischen Aufpoppen eines Dialogs benötigst du einen Desktop der HAL unterstützt. Das tun zum Beispiel KDE und Gnome. Der Ansatz ist ein ganz anderer als beim Automounter, was du mit dem Automounter regelst, kann also von HAL nicht angefasst.

Im FreeBSD-Umsteiger Artikel ist die Einrichtung von HAL für Gnome und KDE beschrieben.
 
Hi,

danke für Deine Antwort. Mit dem PCBSD war nur ein Beispiel.

Ich suche nur die Möglichkeit ein Script nach dem automount für dieses Laufwerk zu starten ( zb. kopieren aller darauf enthaltenen Daten ).

Das nutzen des HAL macht scheinbar nur mit KDE / Gnome Sinn, oder?

Danke
Kai

PS: ich schau mir mal sysutils/hal an ... vielleicht hilft mir dass weiter
 
Last edited:
Ok,

haut soweit hin ( bin nach dem Thread gegangen: klick

Habe aber auch noch das Problem mit dem mehrmaligen ausführen des Scriptes.

Jemand eine Idee?

Danke und viele Grüße
Kai
 
An den Anfang des Skriptes:

Code:
pidfile="/var/run/$(basename "$0").pid"

# Bail out if the skript is already running or create pidfile.
test -e "$pidfile" && exit 0 || echo $$ > "$pidfile"

An das Ende des Skripts:

Code:
(sleep 5; rm "$pidfile") &

Durch den Sleep befehl wird das Skript noch für fünf zusätzliche Sekunden blockiert. Ob das Sinnvoll ist musst du durch ausprobieren herausfinden. Wenn dein Skript länger als ein paar Sekunden läuft reicht wahrscheinlich ein
Code:
rm "$pidfile"
am Ende des Skripts.
 
Wenn du deinen cdfs Eintrag durch program ersetzt, kannst du bel. Code zum Mounten ausfuehren lassen, zB:

Code:
usb     type:=program;dev:=/dev/msdosfs/USBSTICK;addopts:=unmount;\
        mount:="/sbin/mount mount -t msdosfs -olongnames ${dev} ${fs}";\
        unmount:="/sbin/umount umount ${fs}"
 
Danke für Eure Tipps!

Mit der hald Sache funzt prima ... jetzt hab ich aber ein neues Problem.

Nach dem mounten und kopieren der Daten hängt das Script ( egal ob mit cp oder rsync z.b. )

Ich wollte danach umount und cdcontrol eject ausführen, nur kommt er da gar nicht mehr hin.

Gibt es die Datei schon und ich nutze cp -nv, funzt es komischerweise super!

Is das CD-Laufwerk in nem busy-Status? Habt ihr ne Idee?

Danke
Kai
 
Hi,

hier das Script:

Code:
#!/bin/sh

PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
export PATH

# rechner hat 3 cd-laufwerke
pidfile="/var/run/$(basename "$HAL_PROP_BLOCK_DEVICE").pid"
logfile="/var/log/data.log"

echo "$pidfile" >> "$logfile"

# Bail out if the skript is already running or create pidfile.
test -e "$pidfile" && exit 0 || echo $$ > "$pidfile"

# einträge sind in /etc/fstab
mount "$HAL_PROP_BLOCK_DEVICE"

# verzeichnis zuweisen
DIR=`mount | grep $HAL_PROP_BLOCK_DEVICE | awk '{ print $3 }'`

echo "$DIR" >> "$logfile"

# daten kopieren, dass letzte was er macht, ausgabe kommt im log noch an
cp -v $DIR/* /usr/books/to_upload/ >> "$logfile"

echo "hier__" >> "$logfile"

umount -v "$DIR" >> "$logfile"

echo "hier" >> "$logfile"

cdcontrol -f "$HAL_PROP_BLOCK_DEVICE" eject

rm "$pidfile"

Nach der "cp" Zeile passiert nix mehr, selbes mit rsync. Script auf der Shell ausgeführt, funktioniert bis zum Ende!

Kai
 
Juten Morgen ...

habe gestern abend noch mit wait getestet. Hab dann noch %1 und $! genutzt ... funzt aber alles nicht.

Mache ich wait%1 statt wait %1 geht er im Script weiter, kopiert aber nicht.

Ich steig da nich hinter ....

Kai
 
Wait einfach ohne Parameter, dann wartet er auf alle geforkten Prozesse. Irgendwas ist da spanisch. Versuch mal folgendes:

sh -c "cp Kommando" &
wait
 
Mit cp will einfach nich ...

Habe mal so getestet:

Code:
sh -c "ls -l $DIR >> $logfile" &
wait

Dass läuft wunderbar durch .... *grübel*
 
Ich denke irgendetwas in deinem Environment stört cp. Das in eine andere Shell zu bringen oder wegzuforken scheint nicht zu helfen. Vielleicht kannst du das Kopieren ja mit tar erledigen. Jedenfalls kannst du auf das wait-Geraffel wohl verzichten.
 
Hi,

ich bekomm ne Macke ... mit tar genau dass selbe Problem ( wie ja mit rsync auch ).

Ich schau mal weiter ...

Kai
 
Hi,

habe es in nen Perl-Script ausgelagert, nun funzt es.

Nun hab ich nen neues Problem. Der Rechner hat 4 CD-Rom Laufwerke.

Schiebe ich alle gleichzeitig zu ( oder minimal zeitversetzt ), kopiert er nur eine CD.

Kann es sein dass der HALD da nich mitkommt?

Mein Policy-File sieht grade ( nach vielem rumprobieren ) so aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>

<deviceinfo version="0.2">
  <device>
    <match key="block.device" string="/dev/acd0">
        <match key="volume.is_disc" bool="true">
            <append key="info.callouts.add" type="strlist">copy-books-0</append>
        </match>
    </match>
  </device>
  <device>
    <match key="block.device" string="/dev/acd1">
        <match key="volume.is_disc" bool="true">
            <append key="info.callouts.add" type="strlist">copy-books-1</append>
        </match>
    </match>
  </device>
  <device>
    <match key="block.device" string="/dev/acd2">
        <match key="volume.is_disc" bool="true">
            <append key="info.callouts.add" type="strlist">copy-books-2</append>
        </match>
    </match>
  </device>
  <device>
    <match key="block.device" string="/dev/acd3">
        <match key="volume.is_disc" bool="true">
            <append key="info.callouts.add" type="strlist">copy-books-3</append>
        </match>
    </match>
  </device>
</deviceinfo>

Hab jetzt schon extra für jedes Device ein Script angelegt :grumble:

Habt ihr ne Idee?

Danke
Kai
 
Ich denke es kommt darauf an, dass das Skript je nach Laufwerk einen anderen pidfile anlegt.
 
Hi,

yo ... macht es ... die sehen so aus: /var/run/acd0.pid u.s.w.

Werde das aber nochmal testen ... danke erstmal.

Gruß
Kai
 
So,

gebe jetzt einfach nur die PID in nen Logfile aus.

Schließe ich die Laufwerke, schreibt er eine PID ins Logfile.

Aber sind die Laufwerke zu und ich starte den hald neu, schreibt er alle 4 rein ... ich raffs nich ;'(


Kai
 
Hi,

glaub ich langsam auch ... hab den mal mit verbose=yes gestartet ...

scheint als nimmt er sich immer dass letzte Laufwerk, bei den ersten dreien kommt sowas als Ausgabe ...

Code:
** (process:2323): CRITICAL **: hf_async_wait: assertion `hf_is_waiting == FALSE' failed
Run started hald-probe-storage (10000) (0)

Ich könnt **** ... muss ich umbauen ... trotzdem danke für deine Geduld!

Kai
 
Back
Top