Shellskript funktioniert nicht im contab

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 24.02.2016 18:27:44

Hi,

ich wende mich an euch weil ich lagsam bekloppt werde mit den Shellskript und dem Contab.

Ich habe mir für Backupzwecke dieses Skript erstellt :

Code: Alles auswählen

#Datum aktuell
DATEA=`date +"%Y-%m-%d"`.
#Datum Vortag
DATEY=`date --date="-1 day"  +"%Y-%m-%d"`
#Datum letzte Änderung einer Perforcedatei
DATEDB=`stat --format %y /root/Eine_Datei_Die_Rumliegt`
#Nach Datum abgeschnitten um gleiches Format zu erhalten
DATEDB=${DATEDB:0:10}

#Abfrage ob Datum = aktuell oder vom Vortag
if [ "$DATEDB" = "$DATEA" ] || [ "$DATEDB" = "$DATEY" ]; then
 # ...hier wird wild rumkopiert etc. habe es rausgenommen um die Übersichtlichkeit zu wahren.
fi
soviel zu meinem tollen Plan.
Diese Abfolge funktioniert auch wunderbar wenn ich das Skript direkt ausführe, sogar ein "echo DATEA" und ein "echo DATEDB" gibt die richtigen Daten aus.
Versuche ich aber das Skript im Contab auszuführen ...passiert nichts.

Ich habe schon etliche Formate ausprobiert, zunächst hing er bei DATEDB=${DATEDB:0:10} fest, als ich das ein wenig umformatiert habe schluckte er es um dan beim IF rauszufliegen.
Da ich DATEDB auch als Dateinamen verwenden wollte merkte ich später auch das dies auch nicht funktionierte, der Inhalt war leer.
Komischerweise war der Inhalt beim gleichen Auftruf von DATEA oder DATEY völlig ok.

Ich bin echt am Ende meiner Weisheit, ich bin recht neu in Linux unterwegs aber ich habe schon im Netz rumgewühlt und fast jedes erdenkliche Format mit dem Contab getestet, nichts geht.
Ich hoffe das es unter euch Linuxprofis jemanden gibt der mir vielleicht weiterhelfen könnte.

Denke nicht das ich der Erste mit dieser Idee bin.

Lieben Gruß Harlyk

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Shellskript funktioniert nicht im contab

Beitrag von heisenberg » 24.02.2016 19:21:19

Trage das Script mit Ausgabeumlenkung als cronjob ein:

Code: Alles auswählen

*/5 * * * * /usr/local/bin/deinscript >>/tmp/deinscript.log 2>&1 
...und prüfe die Ausgabedatei.

Ansonsten hilft am Anfang des Scriptes:

Code: Alles auswählen

set -x
Das zeigt Dir die Kommandozeilen an, bevor diese ausgeführt werden.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 24.02.2016 20:02:09

Danke dir, so stochert man doch gleich nicht mehr ganz so im Dunkeln :)

So die Fehlerliste sagt mir, erstmal was von Bad Substituion in Line 1 das lag aber wohl am fehlenden bash.
Dann hatte er wohl noch Probleme mit dem IF , zwei Conditions mit || getrennt geht anscheinend nicht.

Und mit dann kommt er nicht damit klar das ich die Variable DATEDB = $(DATEDB:0:10) so verwenden will.
Da tapse ich aber noch im dunkeln.

Edit:
Die Fehlermeldung nun lautet : line 6: 2016-02-24: command not found

Der Befehl ist :
DATEDB=echo ${DATEDB:0:10}

Wobei DATEDB einen Dateizeitstempel hat.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Shellskript funktioniert nicht im contab

Beitrag von heisenberg » 24.02.2016 20:15:42

Streiche echo. So ist es richtig:

Code: Alles auswählen

VAR=${ANDEREVAR:0:5}
Im übrigen scheinst Du da evtl. $(...) mit ${...} zu verwechseln.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 24.02.2016 20:31:38

Danke aber habe ich versucht.
Der Fehler bleibt der gleiche, habe stattdessen den Kram in " ` " gesetzt.
Jetzt bekomme ich keine Fehlermeldung mehr.

Hatte noch ein Fehler im IF, da ich ein OR benötigte und || ja nicht funktioniert, habe ich das Ganze mit -o gelöst.

Als $DATEDB kann ich jetzt auch das Datum im Dateinamen verwenden.

Endlich nach langer langer experimentiererei funktioniert es.
Falls ich es verhindern kann war das auch meine letzte Shell .. omg danke euch sooo sehr :)

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 24.02.2016 20:37:56

Der Vollständigkeithalber nochmal das funktionierende Shellskript

Code: Alles auswählen

#!/bin/bash
#Datum aktuell
DATEA=`date +"%Y-%m-%d"`.
#Datum Vortag
DATEY=`date --date="-1 day"  +"%Y-%m-%d"`
#Datum letzte Änderung einer Perforcedatei
DATEDB=`stat --format %y /Pfad mit Datei die geprüft werden soll`
#Nach Datum abgeschnitten um gleiches Format zu erhalten
DATEDB=`echo ${DATEDB:0:10}`

#Abfrage ob Datum = aktuell oder vom Vortag, da Sicherung um 2:00 Uhr läuft
if [ "$DATEDB" = "$DATEY" -o "$DATEDB" = "$DATEA" ]; then
  cd /DeinPfad/
  mkdir TMP
  cd TMP
  #Hier Daten hinkopieren
  #Packen 
  tar -czf ../Backup_$DATEDB.tar.gz .
  cd ..
  #TMP Ordner löschen 
  rm -rf TMP
fi

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Shellskript funktioniert nicht im contab

Beitrag von heisenberg » 24.02.2016 21:58:45

Code: Alles auswählen

DATEDB=`echo ${DATEDB:0:10}`
Ach so. Jetzt habe ich verstanden, was Du mit `...` gemeint hast.

Ist zwar kein Weltuntergang, aber Du erzeugst Da unnötigerweise einen Zusatzprozess und zwar eine Subshell. Der folgende Befehl macht exakt das gleiche, aber ohne Subshell im aktuellen Prozess:

Code: Alles auswählen

DATEDB=${DATEDB:0:10}
Wenn Du Dich mal irgendwann Fragen solltest, warum Dein Linux auf einmal so langsam wird, wenn Du ein Shell-Script startest, dann ist exzessiver Gebrauch von so etwas eine der Antworten :)
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 25.02.2016 07:46:39

Danke für den Tipp Heisenberg.
Jedoch habe ich diese Formatierung auch schon ausprobiert mit dem Ergebnis das er mir sagt Funktion unbekannt oder so ähnlich.

Ich werde es aber noch mal testen, vielleicht liegt das Problem ja irgendwie im Detail, meist ist es ja so das man etwas nochmal testen und aufmal funktioniert alles obwohl man sich sicher ist das es vorher nicht ging.
Werde (sobald ich dazu komme) das Ergebnis hier posten

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 25.02.2016 07:57:33

OMG... was ist bloß mit Skripting hier los :(

Es funktioniert tatsächlich Heisenberg, danke nochmal für den Tipp und die Erklärung.
Komischerweise war ich mir nicht nur zu 100% sicher das ich es schon getestet hatte, nein man sieht direkt bei meinem ersten Post das ich es so angewendet habe.

Trotzdessen hatte ich genau den beschriebenen Fehler, kann es sein das das bash zu Beginn Sachen ermöglicht die sonst nicht gehen ?
Oder das er Probleme mit dem IF hatte und dann irgendwie im Fehlerlog die falsche Zeile ausgegeben hat ??

Ich schnall das echt nicht mehr, extrem verwirrend alles.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Shellskript funktioniert nicht im contab

Beitrag von heisenberg » 25.02.2016 09:45:31

Scripting ist wohl noch etwas neu für Dich. Da weiss man halt nicht gleich alles sofort zu 100%. Das Substring-Konstrukt geht z. B. nur in der bash, welche Du ja erst nachträglich per Shebang(#!/bin/bash) eingestellt hast.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Harlyk
Beiträge: 7
Registriert: 24.02.2016 18:16:01

Re: Shellskript funktioniert nicht im contab

Beitrag von Harlyk » 25.02.2016 10:25:06

Ahja ok ... hmm aber ich hatte ja kein Bash als ich den alten Syntax hatte.. oder ist das mit Substring-Konstrukt gemeint ?
Weiß grad nicht ob die erste oder zweite Version das Substring Konstrukt ist.

Was Programmieren und Batch Dateien angeht bin ich wohl gut bewandert, Nur Linux ist recht neu für mich und die Shells dort weichen natürlich von den Windows Batchs ab.
Logisch :D

Mit Linux setze ich mich erst seit Beginn diesen Jahres auseinander, naja mal hier und mal da, nicht durchgehend.
Hatte mir ein Root Server zugelegt um damit einige Server zu realisieren, unter anderem Versionskontrolle was wiederum dazu führte das ich natürlich auch Backups benötige.

Naja so führt eins zum anderen. Lustig dabei ist das viele immer so extrem von Linux schwärmen und wenn man dann mal Fragen hat bemerkt man das die meisten Leute sich irgendwie 0 mit Linux auskennen ^^
Mittlerweile komme ich aber recht gut klar, mein erster Kontakt mit dem Skripting war jetzt leicht verwirrend aber denke mal beim 2 mal wirds recht leicht von der Hand gehen, war bisher mit allen Linuxbestandteilen so, erst der blanke Horror und beim 2ten mal doch recht schnell einfach und angenehm ;)

Antworten