• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Ordnerüberwachung mit Incron und Weitergabe Dateiname an Skript

Hallo,

es soll ein Ordner auf neue Dateien überwacht werden und diese soll dann umgewandelt werden. Zunächst habe ich Incron installiert und so eingerichtet:

Code:
/zu/ueberwachender/ordner/ IN_CREATE,IN_MOVED_TO /pfad/zum/script $#

Das Script sieht so aus:

Code:
lxterminal -e ffmpeg -i "$1" -f flac "$1"_new.flac"

(lxterminal -e dient nur dazu ein Fenster zu sehen wenn der Vorgang beginnt). Die Weitergabe an das Script funktioniert grundsätzlich, denn wenn ich statt ffmpeg da einfach

Code:
touch /pad/zu/einem/anderen/ordner/"$1"

drin stehen habe, wird in dem anderen Ordner eine leere Datei mit dem korrekten Dateinamen der hin in den Ordner kopierten Datei erstellt. Das ganze geht nur bei ffmpeg nicht. Ich habe auch schon vor der Variable $1 absolute Pfade eingerichtet (mit einem Ausgabepfad zu einem anderen als den zu überwachenden Ordner). Es tut sich einfach nichts. Der FFmpeg-Aufrufe alle in einem Terminal mit Dateinamen statt Variablen geht problemlos.

Sieht hier jemand gleich das Problem?
 
OP
B

bunter fisch

Member
Das ändert leider das Problem nicht. Auch hätte hier dennoch zumindest LXTerminal aufgehen müssen und dann bei ffmpeg eine Fehlermeldung ausgeben müssen. Es passiert aber leider gar nichts.
 

josef-wien

Ultimate Guru
Das Terminal wird nach Durchführung des Befehls sofort wieder geschlossen, und zwar unabhängig vom Ergebnis des Befehls. Schau einmal nach, ob es wie bei konsole einen Parameter --noclose gibt.
 

abgdf

Guru
bunter fisch schrieb:
Das ändert leider das Problem nicht. Auch hätte ...
Wie kommst Du denn darauf, daß eine ungerade Anzahl von Anführungszeichen keine Änderung gegenüber einer geraden Anzahl von Anführungszeichen bewirken sollte?
In der Shell ist doch jedes Anführungszeichen wichtig (sofern kein Backslash davor ist, dann ist es nur ein normales Zeichen).
 
OP
B

bunter fisch

Member
Es wird überhaupt kein Terminal erst eröffnet, das ist ja das Problem. Auch andere Befehle, z. B. öffnen vom Firefox über das Terminal gehen nicht. DAS Fenster müsste dann ja stehen bleiben. Es tut sich einfach nichts.

Wie kommst Du denn darauf, daß eine ungerade Anzahl von Anführungszeichen keine Änderung gegenüber einer geraden Anzahl von Anführungszeichen bewirken sollte?
In der Shell ist doch jedes Anführungszeichen wichtig (sofern kein Backslash davor ist, dann ist es nur ein normales Zeichen).

Behaupte ich nicht. Ich hab nur gesagt, dass zumindest das Terminalfenster auf gehen müsste und dann eine Fehlermeldung kommen müsste.

Da tut sich wie gesagt aber nichts.
 
A

Anonymous

Gast
bunter fisch schrieb:
Es wird überhaupt kein Terminal erst eröffnet, das ist ja das Problem. Auch andere Befehle, z. B. öffnen vom Firefox über das Terminal gehen nicht. DAS Fenster müsste dann ja stehen bleiben. Es tut sich einfach nichts.

Ganz einfache Überlegung:
Was passiert alles beim ganz normalen Anmelden am Rechner?
Es werden ein paar dutzend Konfigurationsdateien durchlaufen die für deinen User eine komplettes Enviroment in Form von Einstellungen und Variablen generieren. Zusätzlich wird ein X-Server für dich gestartet und du bekommst das alleinige Recht diesen zu nutzen. In deinem Home befinden sich für viele Programme zusätzlich noch Konfigurationen die dann beim Start dieser Programme automatisch geladen werden können.
Wenn du jetzt irgendwelche Fenster neu eröffnest oder Konsolen eröffnest und darin Befehle absetzt, dann können alle diese auf die Enviroment-Variablen zugreifen und auch auf den X-Server und auf vieles mehr, denn sie haben all das geerbt.

Was passiert wenn du etwas über Cron/Anacorn/Incron/..... oder wie sie alle heißen, startest?
Ein Daemon der als root-User oder cron-User oder als ein andere Deamon-User gestartet ist führt ein Script aus, Es sind dabei gerade mal eine Handvoll Umgebungsvariablen gesetzt (durch systemd obendrein noch ein paar mehr Restriktionen als Erlaubnisse) insgesamt gerade so viel das bash die Standardprogramme unterhalb von /bin und /usr/bin ausführen kann, aber nicht viel mehr. Kein Homeverzeichnis, keine Ländereinstellung, keine Limits(außer was von systemd dem service erlaubt wurde), eigentlich fast gar nichts und damit kann er schonmal gar nicht auf irgendwelche Konfigurationsdateien innerhalb des Homeverzeichnisses zugreifen. Der Prozess hat einfach kein HOME keinen USER keinen WINDOWSMANAGER, keine SSH-Variablen, einfach alles nicht da, und was er auf gar keinen Fall hat dieser Prozess jetzt die Berechtigung auf irgend einen X-Server irgendwelche Ausgaben zu machen. Woher soll dieser Prozess auch wissen wer jetzt gerade angemeldet ist und wer welchen X-Server nutzt und ......

Wie kommst du jetzt bitte darauf, das sich bei dir ein Fenster, oder gar Firefox oder was auch immer öffnen sollte? Wo kämen da die ganzen Einstellungen und Berechtigungen zb für den X-Server her? Dein Script hat nur eine einzige Arbeitszeile und nichts mehr.

robi
 

josef-wien

Ultimate Guru
bunter fisch schrieb:
Dann dürfte er aber ein Skript ... auch nicht ausführen
Selbstverständlich wird das Skript ausgeführt. Nachdem ich "Incron" nicht kenne, ging ich bisher davon aus, daß das Programm als angemeldeter Benutzer ausgeführt wird. Wird es jedoch als root oder als spezieller "Incron-Benutzer" ausgeführt, können nur Befehle erfolgreich sein, die erstens der Berechtigung und zweitens der Umgebung dieses Benutzers entsprechen. Ein simples touch in einem Verzeichnis mit Schreibberechtigung ist möglich, ein grafisches Programm dagegen nicht. Wenn keine speziellen Umgebungsvariablen erforderlich sind bzw. sie im Skript gesetzt werden, wird ffmpeg funktionieren, aber Du solltest sowohl das Programm als auch beide Dateien mit vollständigem Pfad angeben.
 
OP
B

bunter fisch

Member
Du solltest sowohl das Programm als auch beide Dateien mit vollständigem Pfad angeben.

Auch das habe ich getan. Ich muss $@ für den Pfad und $# für die Datei eingeben, ohne / dazwischen. Hab das mit 'echo' getestet und so den korrekten Pfad bekommen. Setze ich das gleiche in ffmpeg ein wird nichts ausgeführt. Es wird keine Datei erstellt. Die Pfade stimmen zu 100%. Ich hab das mehrfach durchexerziert, es ging kein einziges mal.

Ich finde aber zu incrontab auch keinen Error-Log wo man mal nachsehen könnte.

P.S. Es kann auch nicht an Leerzeichen im Pfad liegen, da gibt es keine hier im Test.
 

josef-wien

Ultimate Guru
Leite die Ausgabe von ffmpeg in eine Datei um, indem Du am Ende nach einem Leerzeichen
Code:
&>/pfad/zu/logdatei.txt
angibst.
 
OP
B

bunter fisch

Member
Ich hab es jetzt soweit hinbekommen, dass es damit

Code:
output=$(basename "$1")
ffmpeg -i "$1" /ausgabepfad/"$output".mp3

funktioniert. Ich lasse hier die Ausgabe in einen anderen Ordner schreiben, daher auch Basename, damit Incrontab hier nicht in einer Endlosschleife läuft. Allerdings erklärt das nicht, wieso es vorher nicht ging. Zumindest diese (nicht gewollte) Endlosschleife hätte starten müssen. Auch jetzt startet das ganze nicht, wenn ich

Code:
lxterminal -e

davor setze. Die Logfile ist dann leer. Auch wenn ich

Code:
xfce4-terminal -H -x

verwende. Mir wäre hier bei so eiem automatisierten Prozess eine optische Rückmeldung wichtig.
 
OP
B

bunter fisch

Member
Wenn ich da ein '2> /pfad/zur/fehlerlog' anhänge wird dort

Code:
(xfce4-terminal:10494): Gtk-WARNING **: cannot open display:

ausgegeben.
 
Ich glaube, dein cron_daemon will es detached.
Setzte am Zeilenende ein &
Bsp.
lxterminal -e irgendwas_auszuführendes params &
 

drcux

Hacker
DISPLAY=:X.Y lxterminal.....

Dein Display bekommst du raus, indem du in einer lxterminal einfach

echo $DISPLAY

eingibst...
 

drcux

Hacker
www.google.de

Eingabe:

"incron lxterminal"

Zweiter Treffer....

Wobei ich aber die Lösung schon kannte.... ;-)
 
Oben