Startskripte und ihre Verwendung?

  • 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.

Matthieu

Benutzer
Registriert
03. Nov. 2008
Beiträge
13.222
Reaktionspunkte
88
Punkte
344
Wie eventuell bereits bemerkbar arbeite ich mit baris ein wenig an WoL und Co. für die kommende NAS-Generation. Während er sich auf den PC stürzt hab ich mir mal die DS selbst vorgenommen. WoL funktioniert soweit und ich kann andere PCs aufwecken. Jetzt wollte ich das jenes Programm auch beim Hochfahren meinen PC erweckt. Somit bräuchte ich nur noch einen Knopf drücken und ein paar Min später stehen 2 PCs, ein Laptop und ein NAS zur Arbeit bereit :D
Nun aber mein konkretes Problem:
Als das Shellskript endlich fertig war und ich es unter /usr/syno/etc/rc.d als "S05wol.sh" ablegte, startete mein PC plötzlich sowohl beim Hoch-, als auch beim Herunterfahren der DS mit. Damit hat sich zwar auf den ersten Blick ein großes Problem gelöst, denn ich wollte auch in dieser Richtung noch ein wenig Arbeiten, doch stellt sich mir da auch eine große Frage:
Wie fange ich das ganze ab? Wird das Skript mit Parametern aufgerufen, und wenn ja wie fange ich diese im Skript ab?

MfG Matthieu
 
Seltsam.
Normalerweise ist "SxxName" zum starten und "KxxName" zum killen (runterfahren) da. In der REgel sind das Symlinks auf das eingentliche Script.
Aufgerufen werden die Scripte mit Parametern wie "start" und "stop".

Am besten mal die Parameter die das Script bekommt in ein Logfile schreiben, damit Du sicher bist, das es auf der Synology auch so läuft:

Rich (BBCode):
echo "$*" >> /tmp/wol.log
den Namen des aufgerufenen Scriptes kannst Du mit
Rich (BBCode):
echo $0 >> /tmp/wol.log
in das Log schreiben.
 
Wie fange ich das ganze ab? Wird das Skript mit Parametern aufgerufen, und wenn ja wie fange ich diese im Skript ab?

Probier mal folgendes Gerüst:
Rich (BBCode):
#!/bin/sh

case "$1" in
  start)
    # hier kommt der Shell-Code zum Starten rein
    ;;
  stop)
    # hier kommt der Shell-Code zum Stoppen rein
    ;;
  restart)
    # wir basteln einen Restart
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: $N {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0

Alternativ auf der DS mal die Scripte anschauen:
Z.B. "/usr/syno/etc/rc.d/S97apache-sys.sh"
 
Danke für die ausführliche Antwort! 1. hat funktioniert, 2. probier ich dann aus.

MfG Matthieu
 
Dickes Dankeschön, Skript 2 funktioniert ebenfalls vortrefflich. Nur "&N" scheint seinen Job nicht ganz zu tun ;) aber das ist mir relativ egal.

MfG Matthieu
 
Trag da mal $0 statt $N oder &N ein. (siehe unten fett...) Dann klappt das.

Zum Thema Sxx beim booten und Kxx beim runterfahren - stimmt Linux macht das normal so. Die DS beschränkt sich auf ein Script was eben mit start oder stop als Parameter aufgerufen wird - je nach gewünschter Aktion.

Rich (BBCode):
#!/bin/sh
# mount/bind some folders on startup
# and umount them on shutdown/reboot

case $1 in
start)
        ;;
stop)
        ;;
*)
        echo "Usages: $0 [start|stop]"
        ;;
esac

gruss
dude
 
Zum Thema Sxx beim booten und Kxx beim runterfahren - stimmt Linux macht das normal so. Die DS beschränkt sich auf ein Script was eben mit start oder stop als Parameter aufgerufen wird - je nach gewünschter Aktion.

Das 'Starten' der /usr/syno/etc/rc.d-Skripte wird in der /etc/rc durch den Aufruf von /usr/syno/sbin/manutild vorgenommen (kann man sich am besten mit string anschauen; grep geht zur Not auch):

Rich (BBCode):
Synology> grep -A 4 'rc.d' /usr/syno/sbin/manutild
/usr/syno/etc/rc.d

%s start

Es wird eine Schleife auf alle Dateien in der rc.d gelegt und mit der Option 'start' gestartet (in %s stehen die jeweiligen Skriptnamen). Mit string oder grep kann man sich nicht das Programm anschauen, sondern nur die Strings im Programm; den Rest muss man sich zusammenreimen.

Das Gegenstück zu manutild ist /usr/syno/bin/syno_poweroff_task. Auch hier kann man nach schauen und wird fündig (das Programm ist auch ein wenig redseliger):

Rich (BBCode):
Synology> string syno_poweroff_task | more
....
/usr/syno/bin/volume -c > /dev/null 2>&1
echo "t" > /dev/ttyS1
%s/S*.sh
/usr/syno/etc/rc.d
/usr/syno/etc/rc.d/S95sshd.sh
%s stop > /dev/null 2>&1
touch /.NormalShutdown
/dev/synobios
....

Hier findet man also die Option 'stop' und sieht vielleicht auch, dass nur die Skripte, die mit einem 'S' anfangen, abgearbeitet werden. Nebenbei ist hier auch ein Hinweis zu finden, wie die DS zwischen einen 'normalen' und einen durch einen Stromfehler erzeugten Ende unterscheiden kann: durch die Existenz der Datei /.NormalShutdown. Wer mag, kann sich das Prozedere, wie mit dieser Datei beim Starten umgegangen wird, in der /etc/rc anschauen. Nur damit jetzt die Phantasie nicht durch geht: Dies ist nicht der Schalter, mit dem die DS automatisch den Strom bekommt, der wird wohl durch irgend eine Einstellung im Gerät /dev/synobios vorgenommen. Aber hierzu gibt es leider keine Dokumentation ;)

Itari

PS. es kann sein, dass ich das alles schon mal gepostet hatte; bin zu faul, das jetzt heraus zu suchen
 
PS. es kann sein, dass ich das alles schon mal gepostet hatte; bin zu faul, das jetzt heraus zu suchen
Musst du nicht, Danke für die Antwort!

Ich schließe aus den Dateien aber auch, dass das Kommando "poweroff" mit dem des DSM identisch ist. Bei "reboot" scheint sich da allerdings irgendetwas quer zu stellen, denn dann kommt der sys-apache beim Starten nicht mehr aus den Löchern ...

MfG Matthieu
 
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