Shell-Skript für auto umount
Shell-Skript für auto umount
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
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
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:
sprich enthält die datei mount.txt das wort UNMOUNT so wird der skript "ausgehangen".
gruß, marian
mein erster ansatz als n00p wäre:
Code: Alles auswählen
#!/bin/bash
if grep UNMOUNT mount.txt
then umount /dev/usbstick
fi
gruß, marian
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).
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!
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
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
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.:
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.
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
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.
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?
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?
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:
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":
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.
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
/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 &
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.