_anonymous0815_
Lt. Commander
- Registriert
- Aug. 2020
- Beiträge
- 1.406
Hallo Forum,
ich arbeite in letzter Zeit an einem kleineren Projekt, um meine Discs automatisch beim einlegen ins Laufwerk einzulesen.
Ich arbeite dabei mit folgender, eigener udev-Regel:
Dabei wird das Skript, read_discs.sh angestoßen, das sieht folgendermaßen aus:
Und jetzt habe ich folgendes Problem.
Wenn die Disc im Laufwerk drinnen liegt und ich mit ./read_discs.sh sr0
das Skript anstarte, funktioniert es perfekt. So wie es sein soll.
Wenn allerdings eine Disc neu eingelegt wird und das Laufwerk einrastet und udev das Skript startet, funktioniert das Skript zwar auch, ABER der letzte eject-Befehl, sowie der letzte Aufruf der Logfunktion bleibt aus.
Gerade der letzte Aufruf der Logfunktion ist entscheidend, da ich später den Log in ein Webinterface überführen möchte, was ungefähr so aussehen soll:
Seht Ihr eventuell einen groben Schnitzer, den ich übersehe?
Vielen Dank schon mal.
ich arbeite in letzter Zeit an einem kleineren Projekt, um meine Discs automatisch beim einlegen ins Laufwerk einzulesen.
Ich arbeite dabei mit folgender, eigener udev-Regel:
Code:
root@editing-vm:/home/edit/scripts# cat /etc/udev/rules.d/90-srX-changing.rules
ACTION=="change", KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD}=="1", ENV{ID_CDROM_MEDIA_STATE}=="complete", ENV{ID_FS_TYPE}=="udf", RUN+="/home/edit/scripts/read_discs.sh %k"
ACTION=="change", KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD}=="1", ENV{ID_CDROM_MEDIA_STATE}=="complete", ENV{ID_FS_TYPE}=="iso9660", RUN+="/home/edit/scripts/read_discs.sh %k"
#ACTION=="change", KERNEL=="sr[0-9]*", ENV{ID_CDROM_BD}=="1", ENV{ID_CDROM_MEDIA_STATE}=="complete", ENV{ID_FS_TYPE}=="udf", RUN+="/home/edit/scripts/read_discs.sh %k"
#ACTION=="change", KERNEL=="sr[0-9]*", ENV{ID_CDROM_BD}=="1", ENV{ID_CDROM_MEDIA_STATE}=="complete", ENV{ID_FS_TYPE}=="iso9660", RUN+="/home/edit/scripts/read_discs.sh %k"
Dabei wird das Skript, read_discs.sh angestoßen, das sieht folgendermaßen aus:
Bash:
#!/bin/bash
if [[ $1 =~ sr[0-9]+ ]]
then
srX="/dev/$1"
srXlog="/home/edit/scripts/srXlog"
blkid_label=$(blkid ${srX} | awk '{print $3}')
uidlog="/home/edit/scripts/uid.log"
MKVUser="edit"
MakeMKVHome="/home/edit/WORK/MakeMKV/RAW"
ProgressFile="/home/edit/scripts/${1}.progress"
TargetDirectory="$(date '+%d-%m-%Y')-${blkid_label}/"
min_length="4800"
msg=""
timestamp=$(date '+%d.%m.%Y %H:%M:%S')
function autorip {
start_time=$(date +%s)
log_message 1
su ${MKVUser} -c "mkdir -p ${MakeMKVHome}/${TargetDirectory} && makemkvcon --messages=-null --progress=${ProgressFile} --noscan --cache=1024 --minlength=${1} mkv dev:${srX} all ${MakeMKVHome}/${TargetDirectory}"
RESULT=$?
if [ $RESULT -eq 0 ] #funktioniert wenn manuell angestartet - NICHT wenn über udev gestartet
then
end_time=$(date +%s)
log_message 0 $(expr $end_time - $start_time)
eject ${srX}
exit 0
else
end_time=$(date +%s)
log_message 2 $(expr $end_time - $start_time)
exit 1
fi
}
function log_message {
if [[ $1 == 0 ]]
then
export msg="0 SUCCESSFUL"
elif [[ $1 == 2 ]]
then
export msg="2 ERROR"
else
export msg="1 RUNNING"
fi
if [[ $1 == 1 ]]
then
printf "UID: ${uid} Time: ${timestamp} Device: ${srX} ${blkid_label} Message: ${msg} Duration: 0 Seconds. \n" >> ${srXlog}
else
sed -i "s/UID: $uid Time: $timestamp Device: $srX $blkid_label Message: $msg Duration: 0 Seconds./UID: $uid Time: $timestamp Device: $srX $blkid_label Message: $msg Duration: $2 Seconds./" "$srXlog"
fi
}
if ! [ -z ${blkid_label} ]
then
if ! [[ $(su ${MKVUser} -c "makemkvcon --noscan --minlength ${min_length} info dev:${srX} | awk 'END{print}'") == 'Total 0 titles' ]]
then
source ${uidlog} && printf "uid=$(expr $uid + 1)" > ${uidlog} && autorip ${min_length}
else
min_length="300"
source ${uidlog} && printf "uid=$(expr $uid + 1)" > ${uidlog} && autorip ${min_length}
fi
else
exit 0
fi
else
exit 1
fi
Und jetzt habe ich folgendes Problem.
Wenn die Disc im Laufwerk drinnen liegt und ich mit ./read_discs.sh sr0
das Skript anstarte, funktioniert es perfekt. So wie es sein soll.
Wenn allerdings eine Disc neu eingelegt wird und das Laufwerk einrastet und udev das Skript startet, funktioniert das Skript zwar auch, ABER der letzte eject-Befehl, sowie der letzte Aufruf der Logfunktion bleibt aus.
Gerade der letzte Aufruf der Logfunktion ist entscheidend, da ich später den Log in ein Webinterface überführen möchte, was ungefähr so aussehen soll:
Seht Ihr eventuell einen groben Schnitzer, den ich übersehe?
Vielen Dank schon mal.
Zuletzt bearbeitet: