shell script - nach Reboot wird nicht an Datein angehängt

  • Hallo zusammen,


    ich habe ein Problem bei einem Shell Script, dass ich mir nicht erklären kann. Das Skript sieht im Wesentlichen aus, wie der nachstehende Schnipsel:


    Code
    ...
    echo irgendEineMeldung > /opt/script/meldung.txt
    ...
    echo Statusmeldung >> /opt/script/status.txt
    ...


    Im Prinzip funktioniert das auch wie gewünscht: bei jedem Aufruf dieser Zeile wird die Datei meldung.txt aktualisiert und die Statusmeldung an die Datei status.txt angehängt. Jetzt habe ich dieses Script in die crontab eingetragen und führe es regelmäßig aus. Auch das sieht noch gut aus: jedesmal werden die beiden Dateien aktualisiert, bzw. der Text wird angehängt.


    Nach einem Reboot des NAS passiert jetzt aber etwas, das ich mir nicht erklären kann: die Datei meldung.txt wird weiterhin aktualisiert, das sehe ich sowohl am Datum, als auch am Inhalt der Datei. Allerdings wird die Statusmeldung nicht mehr an die Datei status.txt angehängt, diese Datei wird nicht mehr aktualisiert. Die Befehle, die nach der Ausgabe der Statusmeldung kommen, werden korrekt ausgeführt. Melde ich mich jetzt wieder per SSH an und führe das Skript einmal per Hand aus, so werden beide Dateien wieder aktualisiert. Und von diesem Zeitpunkt an funktioniert das Skript auch über den cron Aufruf wieder richtig.


    Es muss etwas mit dem Anhängen an die Datei zu tun haben, aber ich kann mir nicht erklären, was da schief läuft. In meiner Verzweiflung habe ich die Dateirechte schon rwxrwxrwx gesetzt. Aber auch das hat nichts gebracht, es kann also nicht an den Dateirechten liegen, zumal der cron ja auch als admin gestartet wird.


    Vielleicht kann mir jemand die Augen öffnen, was an dieser Stelle schief läuft.


    Grüße
    mgrabo

  • Hallo mgrabo,


    hast du bereits versucht dir eine evt. Fehlerausgabe in die Datei umzuleiten?


    Aus eigener Erfahrung kann ich sagen, dass sich meine TS 119 nach einem Neustart immer anders verhält - aber eigentlich nur was autorun jobs angeht. Symlinks fehlen noch (z.B. der von/opt ) und globale Variablen (z.B. PATH) sind anders gesetzt. Mit cronjobs hatte ich noch keine Probleme.

  • Hallo steff123,


    danke für den Tipp, manchmal können die Dinge so einfach sein: ich habe mit "set -x" die Meldungen in eine Datei umgeleitet und den Fehler gefunden. Die Ausgabe wird von einem Perl Skript generiert und im Skript habe ich das mit "perl" aufgerufen. Jetzt habe ich das in "/opt/bin/perl" geändert und schon funktioniert das auch.


    Im Nachhinein war dann auch nicht das Ausführen des Skripts an der Konsole dafür verantwortlich, dass das funktioniert hat, sondern einfach nur der Umstand, dass ich mich an der Konsole angemeldet hatte und dadurch der Pfad ergänzt wurde.


    In diesem Sinne: fröhliche Weihnachten! :thumb:

  • Hallo
    Schön, dass es mit /opt/bin/perl bei deiner NAS funktioniert. Bei meinem Modell ist /opt nur ein Symlink auf /share/HDA_DATA/.qpkg/Optware/, der beim Neustart der NAS jedes mal neu erzeugt wird. Ich würde dir raten, in Skripten nicht mit /opt zu arbeiten. Bei mir geht es mal gut und mal nicht. Auf jeden Fall solltest du das bedenken, wenn du mal Skripts schreibt, die direkt beim Startup ausgeführt werden. Wenn der Symlink bei Ausführung des Skriptes noch fehlt, geht's schief.


    Frohe Weihnachten ;)

  • Bei einem crontab-Eintrag braucht er keine Angst haben. Bei Startup-Scripts sieht das anders aus.
    Du hast aber Recht, man sollte in Scripts immer vollständige Pfadangaben nutzen.

  • Dass /opt nur ein Link ist hab ich beim Erstellen des Skriptes gemerkt. Da das Skript in regelmäßigen Abständen läuft, ist das nicht problematisch, falls das bei der ersten Ausführung dann fehlschlägt. Wo müsste ich denn eigentlich Skripte ablegen, die ich beim Systemstart ausführen möchte? Alle Verzeichnisse, die mir so einfallen würden werden beim Reboot ja leider jedesmall zurückgesetzt.

  • Danke für den Tipp! Ich muss mich echt intensiver mit der Doku beschäftigen. Wie schon im Dokument steht: das ist zwar Linux aber halt doch keine Standard-Linux.