Shell-Skript für auto umount

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
marian582
Beiträge: 52
Registriert: 17.01.2008 13:02:49

Shell-Skript für auto umount

Beitrag von marian582 » 29.01.2008 18:47:28

Hallo,

kann mir jemand kurz erklären wie ich ein shell skript erstelle, dass in einem regelmäßigen interval (alle 2 sek.) in eine datei guckt, steht was in dieser datei so automatisch ein umout auf /dev/usbstick erfolgen...

freu mich über jede hilfe.

mfg, marian

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 29.01.2008 19:52:03

Du kannst entweder das Skript per cronsjob (Eintrag über den Befehl: crontab -e) alle 2 Minuten starten lassen, oder aber das Skript in einer Endlosschleife im Hintergrund starten.
Oh, yeah!

marian582
Beiträge: 52
Registriert: 17.01.2008 13:02:49

Beitrag von marian582 » 29.01.2008 19:59:42

ok danke, also wenn da würde ich es über ein cronjob versuchen. wie in etwa muss denn das skript aussehen?
mein erster ansatz als n00p wäre:

Code: Alles auswählen

#!/bin/bash

if grep UNMOUNT mount.txt
then umount /dev/usbstick
fi
sprich enthält die datei mount.txt das wort UNMOUNT so wird der skript "ausgehangen".


gruß, marian

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 29.01.2008 20:11:59

So könnte es funktionieren. Allerdings wirst du dem user wohl noch sudo-Rechte mitgeben müssen, damit er ein umount ausführen darf.

Eventuell könntest du an den grep-Befehl noch ein 1>/dev/null hängen, damit er nicht alle Treffer in der Datei ausgibt. (mit einem 1>/dev/null 2>&1 kannst du auch bei einem eventuellen Fehler, diesen nicht auf stout ausgeben).
Oh, yeah!

marian582
Beiträge: 52
Registriert: 17.01.2008 13:02:49

Beitrag von marian582 » 29.01.2008 20:25:13

also root sollte es denke ich auch ohne sudo gehen..

läuft die crontab von root immer im hintergrund oder nur wenn dieser angemeldet ist?
habe nämlich noch die hürde das mein system beim starten automatisch x ausführt und den browser im kiosk modus öffnet. auf den anderen terminals f1-f6 ist niemand eingelogged...
es wäre schlecht wenn nur www-data angemeldet ist, wenn ja bräuchte ich noch eine routine die einen anderen benutzer an einem bestimmten terminal anmeldet, dessen crontab wiederrum das besagte skript ausführt.


gruß, marian

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 29.01.2008 20:50:40

hi,

entschuldigung, wenn ich unterbreche: hier geht's doch
eigentlich noch um diese Aufgabe?
http://www.debianforum.de/forum/viewtopic.php?t=95099

Dann ist cron ganz schlecht geeignet, weil das Script nur im
Minuten-Abstand laufen würde - bis dahin hat man den USB-Stick
schon längst rausgezogen.

Wie wär's, wenn du autofs, udev usw. sagst, sie sollen sich
garnicht um den Stick kümmern und das direkt per PHP-exec()
(meinetwegen auch passthru) machst?
Also:
- mounten
- drauf schreiben
- umounten
Damit der User www-data das darf, brauchst du eine Zeile in der
/etc/fstab mit der Option "users", z.B.:

Code: Alles auswählen

/dev/sda1   /mnt/usbstick   auto   users,noauto   0  0
Den automatisch zu mounten scheint mir nicht nötig zu sein, weil der
Benutzer ja sowieso etwas auswählen und anklicken muss. Zu dem
Zeitpunkt muss der Stick eben drin stecken, sonst gibt's Mecker.
Beware of programmers who carry screwdrivers.

marian582
Beiträge: 52
Registriert: 17.01.2008 13:02:49

Beitrag von marian582 » 29.01.2008 21:52:50

ja im prinzip geht es noch um diese aufgabe... allerdings habe ich es bereits mit der option users innerhalb der udev regel probiert und auch in der fstab.. habe auch gid=33 und uid=33 angehangen die ja für den www-data nutzer stehen, keine chance.

die möglichkeit das ein anderer user via conjob ein skript ausführt welches wiederrum ein umount auslöst sollte aber machbar sein..

wie kann ich denn bewerkstelligen das sich ein user beim systemstart automatisch anmeldet?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 30.01.2008 20:32:34

hi,

also, nächster Versuch, diesmal ohne passthru() aber auch ohne
fstab, sudo, cron und ohne ständiges Abfragen.

Als erstes muss das Paket inotify-tools installiert werden, dann
muss root ein Script /usr/local/bin/usb_umount erstellen und
ausführbar machen:

Code: Alles auswählen

#!/bin/sh

LOG='/var/log/usb_umount'
FLAG='/var/run/usb_umount'
rm -f $FLAG
touch $FLAG
chmod 600 $FLAG
chown www-data $FLAG

while inotifywait $FLAG >> $LOG 2>&1; do
   date >> $LOG
   umount /usbstick >> $LOG 2>&1
done
der Mount Point /usbstick gefällt mir besser als /mnt/usbstick oder
/dev/usbstick -- beides "tut man nicht". Aber im Prinzip sollte jedes
Verzeichnis funktionieren.

Als nächstes muss ins /etc/rc.local eine Zeile vor das "exit 0":

Code: Alles auswählen

/usr/local/bin/usb_umount &
damit wird das Script beim Booten gestartet und läuft im Hintergrund.
Eine extra Anmeldung ist dann nicht nötig, das Script läuft unter root.

Solange es läuft, kann der User www-data ein umount auslösen, indem
er in die Datei /var/run/usb_umount irgendwas reinschreibt (ein "touch"
würde auch reichen). Fehlermeldungen landen in /var/log/usb_umount.
Beware of programmers who carry screwdrivers.

Antworten