Problem mit Script bei Start

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Problem mit Script bei Start

      Hallo zusammen,

      habe ein einfaches Script in init.d liegen mit folgendem Inhalt:

      Quellcode

      1. #! /bin/sh
      2. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei1 /etc/Ordner
      3. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei2 /etc/Ordner
      4. exit 0


      Es sollen vom Fritz Nas zwei Dateien in ein Verzeichnis kopiert werden.
      Das Script ist verlinkt auf die die Runlevel 2 3 4 5 6. Manuell kann das Script ausgeführt werden und es tut was es soll aber bei Neustart usw. werden entsprechende Dateien nicht kopiert.
      Woran scheitert es hier?
    • Verlinkung auf die Runlevel einzeln erstellt wie folgt:

      Quellcode

      1. ln -s /etc/init.d/Script.sh /etc/rcx.d/S22Script.sh


      x steht für die runlevel. Ich bin mir nicht sicher wofür die Runlevel 4 und 5 sind?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von inF ()

    • Hallo,

      hatte schon ähnliches probiert und zwar folgendes:

      Quellcode

      1. #! /bin/sh
      2. ### BEGIN INIT INFO
      3. # Provides: Copy
      4. # Required-Start:
      5. # Required-Stop:
      6. # Default-Start: 2 3 4 5
      7. # Default-Stop: 0 1 6
      8. # Short-Description: pre_copy
      9. # Description: Copy and delete at startup or stop
      10. ### END INIT INFO
      11. # Aktionen
      12. case "$1" in
      13. start)
      14. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei1 /etc/Ordner
      15. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei2 /etc/Ordner
      16. ;;
      17. stop)
      18. rm /etc/Ordner/Datei1
      19. rm /etc/Ordner/Datei2
      20. ;;
      21. restart)
      22. rm /etc/Ordner/Datei1
      23. rm /etc/Ordner/Datei2
      24. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei1 /etc/Ordner
      25. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei2 /etc/Ordner
      26. ;;
      27. esac
      28. exit 0
      Alles anzeigen


      Das ganze eingefügt mit:

      Quellcode

      1. update-rc.d Script.sh defaults


      Kein Erfolg. Ebenso nicht mit deinem Hinweis.

      Eventuell benötigt das Einbinden des Nas zu lang, sprich das Script wird bearbeitet aber das nas steht noch nicht zur Verfügung?!
      Sleep 10 vor dem cp brachte auch nix.
    • inF schrieb:

      x steht für die runlevel. Ich bin mir nicht sicher wofür die Runlevel 4 und 5 sind?

      Bei init 4 wird gestartet:


      dropbear
      nfsserver
      vsftpd
      rmnologin
      inetd
      syslog
      autofs


      Bei init 5 zusätzlich noch:


      dbus-1
      avahi-daemon

      Zumindest bei meiner Dream, aber die VU wird sich nicht viel anders verhalten.
      - - - Beitrag wurde mit Deppentalk erstellt. - - -

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tantalos ()

    • Über einen entsprechenden Eintrag in /etc/auto.network.

      Dazu gibt es im Board reichlich Infos. Wenn du deine automount.xml hier postest, kann ich dir sagen, wie der Eintrag aussehen muss.
    • Hallo hgdo,

      die automount.xml hat folgende Einträge:

      XML-Quellcode

      1. <?xml version="1.0" ?>
      2. <mountmanager>
      3. <cifs>
      4. <mount>
      5. <active>False</active>
      6. <hdd_replacement>True</hdd_replacement>
      7. <ip>192.168.XX.XX</ip>
      8. <sharename>Fritz</sharename>
      9. <sharedir>fritz.nas</sharedir>
      10. <options>rw</options>
      11. <username>root</username>
      12. <password>password</password>
      13. </mount>
      14. </cifs>
      15. </mountmanager>
      Alles anzeigen


      Muss die automount.xml dann leer sein wenn Einträge in auto.network vorhanden sind?

      EDIT:

      Habe die auto.network entsprechend angepasst und die xml geleert. Jetzt läuft es wunderbar!

      Die Autonetwork sieht folgendermaßen aus:

      Quellcode

      1. precopy1 -fstype=cifs,rw,soft,user=root,pass=xxxx ://192.168.XX.XX/fritz.nas


      Das heisst also das alle mounts die in der xml stehen,erst nach dem kompletten Startvorgang zur Verfügung stehen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von inF ()

    • Die Frage ist auch, werden die Scripts ausgeführt bevor eth0 up ist?

      Ich habe alle Scripte die eine Netzwerkverbindung brauchen im Ordner /etc/network/if-up.d liegen.
      Script sieht zum Beispiel so aus:

      Shell-Script

      1. #!/bin/bash
      2. if [[ $IFACE == eth0 ]]; then
      3. echo "$(date +%d.%m.%y-%H:%M:%S) - Eth0 is UP! Port 12007 wird auf eth0 gesperrt!" >> /etc/openvpn/LOGPermanent.txt
      4. /sbin/iptables -A OUTPUT -o eth0 -p tcp --dport 12007 -j DROP
      5. fi


      Die Befehle werden ausgeführt sobald eth0 komplett initalisiert ist.
      Regel Nr. 1: Du sollst vor jedem Update ein Backup machen...
      Regel Nr. 2: Wenn du denkst, du hast alles bezgl. V14/OScam gelesen, dann liegst du falsch..

      Dieser Beitrag wurde bereits 1337 mal editiert, zuletzt von »Spider-Man« (31.02.2113, 24:62)
    • Bei Timing-Problemen könnte auch den Kopiervorhang auch zeitlich etwas verzögern, ohne den Bootvorgang aufzuhalten, z.B. mit

      Quellcode

      1. #! /bin/sh
      2. (
      3. sleep 60
      4. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei1 /etc/Ordner
      5. cp /media/net/Fritz/Kingston-DataTraveler2-0-01/FRITZ/pre_copy/Datei2 /etc/Ordner
      6. )&
      7. exit 0
      Vu+ Duo2; 2TB WD20NPVX 2.5" SATA; Firmware: VTI 13.0.9
      Coolstream HD-1/Neo; 1TB 2.5" SATA; Firmware: Coolstream ~Reloaded
      Coolstream HD-2/Tank; 1TB 2.5" SATA; Firmware: 2.13
      NAS: Synology DS415+ 3x6TB Raid5, DS212+ 2x3TB Raid1
      1xFritzBox7590 + 1x7580 1&1, KDG
      2x Raspberry PI ModelB, 1x Raspberry PI2 mit 1xSmargoV2, 2xEasymouse G09, Oscam
      1x Amazon Fire TV, 1x Amazon Fire TV Stick

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Benares ()

    • Die sleep-Methode hat einen Nachteil: die kopiert immer, und zwar unabhängig davon, ob das remote-Verzeichniss eingehängt ist oder nicht.
      Ähnliches gilt auch für das if-up script weiter oben.

      Sauberer wäre es, wenn man vorher prüft, ob der mountpunkt tatsächlich verbunden ist.
    • Nachtrag: ich habe mal in meinem Archiv gestöbert und ein altes Script wiedergefunden, welches ich mal für so einen ähnlich Fall gebastelt habe (=> Prüfung, ob Freigabe gemountet oder nicht)
      Wenn noch Bedarf besteht, würde ich mir die Zeit nehmen und das mal anpassen.
    • Ok, ich hab das obige init Skript zur Grundlage genommen.
      Die Variablen muss man nur noch anpassen. Dabei ist das action_retry die anzahl der Versuche und das action_sleep ist die Wartezeit in Sekunden dazwischen.

      Quellcode

      1. #! /bin/sh
      2. mount_src="192.168.1.104/tmp"
      3. action_cmd_start="cp /home/root/test.txt /tmp/y/test1.txt ; cp /home/root/test.txt /tmp/y/test2.txt"
      4. action_cmd_stop="rm -f /tmp/y/test1.txt ; rm -f /tmp/y/test2.txt"
      5. action_retry=3
      6. action_sleep=5
      7. check_avail() {
      8. if [ -n "`mount |grep $mount_src`" ]; then
      9. echo "OK"
      10. else
      11. ## retry:
      12. while [ $action_retry -gt 0 ]; do
      13. action_retry=$((action_retry-1))
      14. sleep $action_sleep
      15. check_avail
      16. done
      17. fi
      18. }
      19. case "$1" in
      20. start)
      21. if [[ -n "`check_avail`" ]]; then
      22. # mount available
      23. eval $action_cmd_start
      24. retval=0
      25. else
      26. # mount NOT available
      27. #echo "mount not available after $action_retry retries. giving up :-("
      28. retval=1
      29. fi
      30. ;;
      31. stop)
      32. eval $action_cmd_stop
      33. retval=0
      34. ;;
      35. restart)
      36. $0 stop
      37. $0 start ;;
      38. esac
      39. exit $retval
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Banana Joe ()

    • Vielen Dank für die Inspiration.

      Ich bin noch ziemlich neu in der Linuxprogrammierwelt aber nicht ganz unerfahren. Wo gibt es denn ein gutes Kompendium zum einlesen und einlernen um eigens vernünftige Scripte zu schreiben?

      Sind die ` in der Zeile

      Quellcode

      1. action_cmd_start="`cp /home/root/test.txt /tmp/y/test1.txt ; cp /home/root/test.txt /tmp/y/test2.txt`"
      ein Schreibfehler oder so gewollt?!

      Viele Grüße
    • Das war so gewollt. Der Ausdruck wird schon falsch expandiert.
      Habe das gestern Nacht aber nicht sehr schön umgesetzt. Besser (und portabler) geht es mit "eval"

      Quellcode

      1. action_cmd_start="cp /home/root/test.txt /tmp/y/test1.txt ; cp /home/root/test.txt /tmp/y/test2.txt"


      also ohne "`" und dann der Aufruf dann mit:

      Quellcode

      1. eval $action_cmd_start


      Also die Syntax welche ich verwendet habe, ist kein Hexenwerk und wird in jedem besseren Einsteiger-Tutorial beschrieben.
      Am Besten finde ich es immer, wenn man ein Linux mit Manual-Pages zur Hand hat (auf der VU nicht vorhanden, aber ein RPI reicht dicke aus), dann muss man nicht jedes Manuel einzeln googeln.

      Edit: ich ändere das in dem obigen Code mal ab...

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Banana Joe ()