Startskripte und ihre Verwendung?

Status
Für weitere Antworten geschlossen.

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
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
 

mkl0815

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
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.
 

mkl0815

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
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"
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Danke für die ausführliche Antwort! 1. hat funktioniert, 2. probier ich dann aus.

MfG Matthieu
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
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
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
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
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
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
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
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