Script für Synoindex

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

neuhier17

Benutzer
Registriert
19. Okt. 2017
Beiträge
19
Reaktionspunkte
0
Punkte
0
Hi zusammen,

ich versuche ein Script für die Medienindizierung zum laufen zu bekommen.
Aber irgendwie passt irgendwas wohl nicht ganz.
Ich habe das Skript erstellt, es liegt im homes/admin Pfad, es ist im Aufgabenplaner aktiv.

Anhang 1 zeigt mein Script und Anhang 2 das Protokoll nach dem ausführen.
Ich bin mit einem User angemeldet der die Administrator Rolle zugewiesen hat.
 

Anhänge

  • 1.png
    1.png
    32 KB · Aufrufe: 81
  • 2.png
    2.png
    25,9 KB · Aufrufe: 81
Läuft das Script unter root?
 
und auf der Konsole kannst du es ohne Probleme direkt aufrufen?
 
Das habe ich nicht getestet.
Über das Terminal beim Mac kann ich mich auf die Syn. einloggen. Was genau für ein Befehl muss ich dann eingeben für einen Test?
 
sudo -i um root zu werden.
Dann vermutlich "perl /pfad/zum/script/script.pl" ?
 
.pl ist normal die Scriptendung von Perl.
 
Wo sehe ich jetzt ob es funktioniert hat?
 

Anhänge

  • 1.png
    1.png
    8,1 KB · Aufrufe: 64
Scheint zumindest keinen Fehler geworfen zu haben.

Wie hast du das ganze im Aufgabenplaner angelegt?
 
Anbei 2 Screenshots.
Kann ich irgendwo in einem Protokoll schauen ob das synoindex angestossen wurde?
Oder kann ich eine Ausgabe erstellen im Script oder alles richtig durchlaufen ist?
 

Anhänge

  • 1.png
    1.png
    25,5 KB · Aufrufe: 53
  • 2.png
    2.png
    47,4 KB · Aufrufe: 53
Ich vermute mal das wird in der SH Shell ausgeführt und nicht mit python, also vielleicht mal die komplette Befehlszeile "python ...." im Aufgabenplaner eintragen.

Auf der Konsole unter "top" kann man vielleicht sehen ob es läuft.
Für die Medienserver / index gibt es vermutlich auch irgendwo Einträge, weiß ich allerdings gerade nicht auswendig.
Ansonsen halt mal irgendwo ein Film hineinkopieren und dann das script laufen lassen, ob der Film dann in der Bibliothek auftaucht.
 
super. Jetzt geht es. Du hattest mit dem "python" recht. Danke
Ich habe den Code hier gefunden. Das ist jetzt aber Perl und eine SH Datei.
Wenn ich das Perl Package installiere, wie kann ich den unten stehenden Code ausführen?


Rich (BBCode):
#!/usr/bin/perl

#
# Synology Media Indexer
#
# The Synology's synoindexd service will only index files if those have been copied to the media
# directory via FTP, SMB, AFP. If you move or copy media files via Telnet/SSH, the indexer is not
# aware of those, and you would have to manually reindex (which is time-consuming).
#
# This script will scan the video directory for modified files over the last two days and will then
# query the synoindex-service if the file was already indexed. If the file does not exist in the index
# database, the script will manually add it for immediate indexing.
#
# The logging component is handy, if you want to monitor when files are indexed and possibly tune your
# cronjob settings. I run the script in a cronjob every 10 minutes, which will then result in little
# overhead.
#
# I have included my most common media types in the script, but if I missed something, you are welcome
# to extend the script (and let me know what types I have missed).
#
# Usage: perl update-syno.sh /volume1/video
#
# Or add to crontab:
# */10 * * * * root perl /volume1/Extensions/scripts/update-syno.sh /volume1/video
#
# DISCLAIMER: 
#
# (C) 2010 by Gerd W. Naschenweng (Gerd@Naschenweng.info / http://www.naschenweng.info)

### Logging: Adjust the path below to the base-directory where you place the script (if you don't need logging, comment out)
use lib qw(/volume1/Extensions/scripts);
use Logging::Log;

@include_files = ("ASF","AVI","DIVX","IMG","ISO","M1V","M2P","M2T","M2TS","M2V",
	"M4V","MKV","MOV","MP4","MPEG4","MPE","MPG","MPG4","MTS","QT","RM","TP","TRP","TS","VOB","WMV","XVID"
);

# message of synoindex indicating that file is not indexed
# for English this is: "Failed to get MediaInfo."
# You can get the message in your locale with the following command (execute as is): synoindex -g "myfile.test" -t video
my $SYNO_ERROR_MSG = "Failed to get MediaInfo.";


## Initialise logging (comment out if you don't need it - but then also comment out the relevant sections in the code below
my $log = Logging::Log->new();
my $log = Logging::Log->new(Handle => \*F);
my $log = Logging::Log->new(File => "/var/log/media-update.log", Mode => 'append');

# pass in number the directory to scan, this will be a recursive scan
my $scan_dir = shift;

if (!$scan_dir) {
	$log->entry("No scanning directory passed, using /volume1/video");
	$scan_dir="/volume1/video";
}

### Search for files which have changed during the last two days (adjust if necessary to shorter/longer intervals)
my @files = `find $scan_dir -type f -mtime -2`;
my $files_indexed = 0;

foreach (@files) {
	my $file = $_;
	chomp($file);
	my $ext = ($file =~ m/([^.]+)$/)[0];

	### Check if the file-name extension is a valid media file
	if (grep {lc $_ eq lc $ext} @include_files) {
		my $result = `synoindex -g \"$file\" -t video`;
		chomp($result);
  
		if ($result =~ m/^$SYNO_ERROR_MSG/i) {
			$log->entry("Adding file to index: $file");
			my @synorc = `synoindex -a \"$file\"`;
			++$files_indexed;
		}
	}
}

if ($files_indexed) {
	$log->entry("Synology Media Indexer added $files_indexed new media file(s)");
} else {
	$log->entry("Synology Media Indexer did not find any new media");
}

# Close the log-file - remove/comment out if you disable logging
$log->close;
 
Sorry. Ich bin da einfach noch nicht so richtig fit in dem Thema.

Du hasttest geschrieben "Ich vermute mal das wird in der SH Shell ausgeführt und nicht mit python, also vielleicht mal die komplette Befehlszeile "python ...." im Aufgabenplaner eintragen."
Was meinst du genau, das wird in der Shell ausgeführt und nicht mit python?

Die neue Datei hat ja jetzt eine *.sh Endung. Ich muss aber im Aufgabenplaner bei Benutzerdefiniertes Script dies eintragen "perl volume1/homes/admin/skripte/update-syno.sh /volume1/video"
Warum steht dann aber "perl" im Aufruf?

Am Ende schreibe ich den Pfad welcher immer überprüft werden soll? Also in dem Beispiel eben nur der Video Ordner korrekt? (/volume1/video)
 
Häh? Du hattest doch vorher im Aufgabenplaner geschrieben dass das erste Script läuft, oder nicht?
Da hattest du doch "python /pfad/zu/script.py" im Aufgabenplaner eingetragen.
Damit übergibst du einen kompletten Befehl der dann auf der Shell ausgeführt wird.
Mit dem Befehl wird der Interpreter (weil das Script in Python Syntax geschrieben ist) gleich mitgegeben.

Da steht jetzt anstatt python halt perl, weil das script in Perl Syntax geschrieben ist, unabhänig von der Endung.
Deshalb enthält es vermutlich Befehle und Syntax mit der z.B. die Shell SH oder BASH selbst nichts anfangen kann.
.sh ist halt nicht zwangsweise ein shell/bash-script welches nur Befehle dieser Shells enthält.

Ja, am Ende steht der Pfad der indiziert werden soll.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat