Aufgabenplaner mit benutzerdefiniertes Skript

  • 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

Ich habe mich noch nie wirklich mit der /etc/rc.local beschäftigt, aber kann es sein, das diese Datei im aktuellen DSM überhaupt nicht existiert, da diese total veraltet ist und mittlerweile durch systemd ersetzt wurde.

Wenn @drago seinen Mount Bind einfach in eine neue und leere Datei mit dem Namen /etc/rc.local geschrieben hat, ohne das am Anfang ein Shebang steht und ohne das die Datei im Vorfeld ausführbar gemacht wurde, dann kann das nicht funktionieren, wobei der Aufgabenplaner i.d.R. auch Skripte ausführt, die nicht ausführbar gemacht wurden. Witzig ist auch, das jedes mal, wenn er das Skript aufruft, eine weitere Zeile in die Datei geschrieben wird, da ein >> Inhalte am Ende der Datei in einer neuen Zeile anhängt… wobei das eigentlich überhaupt nicht funktionieren sollte, weil das Skript sogesehen in sich selbst schreibt. Egal…

Die Datei /etc/rc.local als Aufruf für ein benutzerdefiniertes Skript über den Aufgabenplaner zu verwenden ist sowieso eine ziemlich dumme Idee und sollte daher auf jeden Fall unterlassen werden. Ein benutzerdefiniertes Skript kann eigentlich überall liegen und dabei einen individuellen Dateinamen tragen, welche jedoch die Dateiendung .sh tragen sollte und ein Shebang am Anfang beinhalten sollte. Am besten wäre es, wenn das Skript irgendwo in einem freigegeben Ordner liegen würde, damit man es ggf. mit dem Text Editor im späteren Verlauf bearbeiten kann. Auch überlebt das Skript damit auch ein DSM Update. Nichtsdestotrotz sollte einem mount vor dem herunterfahren der DS ein umount vorangestellt werden.

@drago gib auf der Konsole mal ein…

Bash:
cat /etc/rc.local

… ein, und poste hier mal, was dir daraufhin angezeigt wird.
 
  • Like
Reaktionen: Benie
Am einfachsten wäre es wohl, wenn du einmal ein benutzerdefiniertes Skript als root im Aufgabenplaner hinterlegst, das beim hochfahren ausgeführt wird. Dazu einfach in das Textfeld den mount Befehl eingeben, natürlich mit den Pfaden, die du dabei verwenden möchtest. Wichtig ist, das der Zielpfad im Vorfeld erstellt werden muss.
Bash:
mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle

Dann legst du ein weiteres benutzerdefiniertes Skript als root im Aufgabenplaner an, das beim runterfahren ausgeführt wird, um das ganze wieder zu unmounten.

Bash:
umount /volume1/Ziel/von-Quelle

Ich habe es zwar nicht getestet, aber so sollte das theoretisch funktionieren.
 
Genau so! Dafür ist keine separate Skriptdatei nötig, die vorher vielleicht noch ausführbar gemacht werden muss.
Meines Wissens nach muss zwingend der User root für mount genutzt werden.
Zu dem würde ich vorher noch ein wait 120 setzen, damit der mount erst zwei Minuten nach dem Start versucht wird, wenn die Volumes verfügbar sind.

Bash:
wait 120
mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle

Oder mit konkreter Prüfung:
Bash:
while [ ! -d /volume1 ] || ! mountpoint -q /volume1; do
    echo "Warte auf Volume1..."
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle
 
Zuletzt bearbeitet:
Nach fast 20 Beiträgen postest du das erste mal dein Script.
Weißt du was das Script macht? Du schreibst nur etwas in eine Datei mit dem Script. Du führst aber nichts aus. Lass dir das doch mal von einer KI erklären. Wieso führst du das mount nicht direkt aus? Das meine ich mit Eigengenitive. Du probierst es ja nicht mal zu verstehen.
Jetzt bin ich hier aber wirklich raus. Vielleicht hat ja jemand anders Lust sich dem anzunehmen.
1. Habe ich wie bereits ob beschrieben die Anleitung zu meinem Skript gepostet, das hätte man sich anschauen können.
2. Habe ich keine Erfahrungen in Skripte schreiben, daher die o.g. Anleitung.
3. Frage ich mich warum Du dich hier im Forum registriert hast, wenn Du die User die wenig Ahnung von der Materie haben, als verblödet dahinstellst.
4. Ersuche ich genau aus den o.g. Gründen um Hilfe, da ich hier nicht weiter komme. Vielleicht meldet sich noch jemand anderes der mehr Kompetenz zeigt.
 
  • Like
Reaktionen: Benie
Genau so! Dafür ist keine separate Skriptdatei nötig, die vorher vielleicht noch ausführbar gemacht werden muss.
Meines Wissens nach muss zwingend der User root für mount genutzt werden.
Zu dem würde ich vorher noch ein wait 120 setzen, damit der mount erst zwei Minuten nach dem Start versucht wird, wenn die Volumes verfügbar sind.

Bash:
wait 120
mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle

Oder mit konkreter Prüfung:
Bash:
while [ ! -d /volume1 ] || ! mountpoint -q /volume1; do
    echo "Warte auf Volume1..."
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle
Hi,

cool, jemand der was erklären kann.

Probiere ich aus, ich habe halt die Anleitung befolgt und das Skript in /etc/rc.local angelegt, wusste nicht das man Skripte mit dem Aufgabenplaner direkt ausführen kann. Die verzögerte Ausführung ist eine gute Idee, in der Log Datei habe ich festgestellt das die Ordner beim hochfahren noch nicht verfügbar sind, weshalb es zu der Unterbrechung führt.
 
Funktioniert irgendwie nicht, bekomme in der Log Datei das angezeigt.

Warte auf Volume1...
/volume1/downloads/Ordner Mounten/1756394489/script.log: line 1: mountpoint: command not found


Das habe ich in den Aufgabenplaner eingetragen:

Bash:
while [ ! -d /volume1 ] || ! mountpoint -q /volume1; do
    echo "Warte auf Volume1..."
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/alexander/Dogs /volume1/homes/juergen/Photos/Dogs
/bin/mount -o bind /volume1/alexander/Horse /volume1/homes/juergen/Photos/Horses
 
Zuletzt bearbeitet von einem Moderator:
OK, im DSM fehlt mal wieder ein Programm (mountpoint). Sorry, dass hatte ich nicht geprüft.

Dann entweder wie nachfolgend, oder nur mit der Wartezeit wie in #23 gezeigt.

Bash:
while [ ! -d /volume1 ] || ! grep -qE '\s/volume1\s' /proc/mounts; do
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle
 
  • Like
Reaktionen: Benie
Muss vor dem Befehl "bash" eingetragen werden, wie hier im Beispiel ?
 

Anhänge

  • Firefox_Screenshot_2025-08-28T16-05-00.719Z.png
    Firefox_Screenshot_2025-08-28T16-05-00.719Z.png
    42,3 KB · Aufrufe: 6
Zuletzt bearbeitet von einem Moderator:
Nein, nur der Code (mit angepassten Pfaden) wie im Post.

Zur Erklärung:
Bash muss nur davor gesetzt werden, wenn man eine separate Skriptdatei aufruft, in dem keine Shebang ist (1. Zeile im Skript mit Pfad zum Interpreter z.B. #!/bin/bash) oder wenn die Skriptdatei nicht ausführbar gemacht wurde.
 
Volume1 ist bereit, führe Mount aus...
mount: /volume1/homes/juergen/Photos/Dogs: special device /volume1/alexander/Dogs does not exist.
mount: /volume1/homes/juergen/Photos/Horses: special device /volume1/alexander/Horse does not exist.


Ist hier die Wartezeit zu kurz ?
 
Zuletzt bearbeitet von einem Moderator:
Existieren die Ordner /volume1/alexander/Dogs sowie /volume1/alexander/Horse und sind dieses leer, bevor du etwas dorthin mounten möchtest?
 
Zeig mal bitte deine komplette Mountzeile.
Bash:
while [ ! -d /volume1 ] || ! grep -qE '\s/volume1\s' /proc/mounts; do
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/alexander/Dogs /volume1/homes/juergen/Photos/Dogs
/bin/mount -o bind /volume1/alexander/Horse /volume1/homes/juergen/Photos/Horses
 
Existieren die Ordner /volume1/alexander/Dogs sowie /volume1/alexander/Horse und sind dieses leer, bevor du etwas dorthin mounten möchtest?
Das sind die Quellordner und soll auf /volume1/homes/juergen/Photos/Dogs und /volume1/homes/juergen/Photos/Horses gemountet werden.
 
Habe ich auch grade gemerkt, nachdem du das Skript gepostet hast.
 
Vielleicht werden die Home-Verzeichnisse auch noch etwas verzögert eingehangen. Da könnten wir die Prüfung etwas spezialisieren. Oder du versuchst es halt mit der Wartezeit.

Bash:
while [ ! -d /volume1/homes ] || ! grep -qE '\s/volume1\s' /proc/mounts; do
    sleep 5
done

echo "Volume1 ist bereit, führe Mount aus..."
/bin/mount -o bind /volume1/alexander/Dogs /volume1/homes/juergen/Photos/Dogs
/bin/mount -o bind /volume1/alexander/Horse /volume1/homes/juergen/Photos/Horses
 
Ich glaube er meint den Test.
while [ ! -d /volume1/alexander ] || … statt while [ ! -d /volume1/homes ] || …

PS:
Bash:
wait 120
mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle
Korrektur – richtig heißt es:
Bash:
sleep 120
mount -o bind /volume1/Quelle/ /volume1/Ziel/von-Quelle
 

Additional post fields

 

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