Script für Synoindex

Status
Für weitere Antworten geschlossen.

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
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

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Läuft das Script unter root?
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Ja, im Aufgabenplaner habe ich root ausgewählt.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
und auf der Konsole kannst du es ohne Probleme direkt aufrufen?
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
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?
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
sudo -i um root zu werden.
Dann vermutlich "perl /pfad/zum/script/script.pl" ?
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
das oben gezeigt ist ein python script oder?
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
.pl ist normal die Scriptendung von Perl.
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Wo sehe ich jetzt ob es funktioniert hat?
 

Anhänge

  • 1.png
    1.png
    8,1 KB · Aufrufe: 64

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Scheint zumindest keinen Fehler geworfen zu haben.

Wie hast du das ganze im Aufgabenplaner angelegt?
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
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

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
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.
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
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;
 

neuhier17

Benutzer
Mitglied seit
19. Okt 2017
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
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)
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
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