befehl definieren im cronjob

D

doonot

Mitglied
Ich habe hier ein kleines Problem, ich muss im cronjob einen befehl definieren, welcher alle 2 minuten aufgerufen werden soll. es wird ein script aufgerufen, ein kleines beispiel des befehles:

Code:
./tpi_in_response_time.sh -d 071127 -e >/tmp/tpi_in_response_071127

da ich nach dem script das datum via -d angebe, sucht er nur die files für das aktuelle datum, aber ich möchte das er es so macht:
nimm das heutige datum und ziehe 2 minuten ab (dh. nur die einträge, welche in der letzten 2 minuten passiert sind). wie kann ich das machen? date -2min? oder so was in die richtung :)

vielen dank im voraus
 
da ich nach dem script das datum via -d angebe, sucht er nur die files für das aktuelle datum
Moin,

wie denn? Wie wird gesucht?

nimm das heutige datum und ziehe 2 minuten ab (dh. nur die einträge, welche in der letzten 2 minuten passiert sind). wie kann ich das machen? date -2min? oder so was in die richtung :)
Code:
#!/bin/bash
TIMESTAMP=eval date +%s
echo $TIMESTAMP
Du möchtest glaube ich ganz zu Beginn des Scriptes einen Zeitstempel erzeugen und von dem 120 Sekunden abziehen.
 
ich habe einmal gelesen, dass man es mit date -2min machen kann, jedoch weiss ch nicht wie das geht¨.

wie ich ja geschrieben habe, muss ich all 2 minuten ein scirpt ausführen, welches die daten der letzten 2 minuten hohlt, darf aber nicht date selbst verändern. wisst ihr weiter?
 
ja und da war halt meine Idee, daß du zuerst einen sekundengenauen Timestamp machst und davon 120 abziehst. Das ist das Datum, ab dem du suchst....

Bin ich da jetzt auf dem Holzweg?
 
meinst du am anfang des scriptes einen timestamp der sagt datum minus 120 sekunden, und später, wenn ich den befehl eingebe anstatt date den timestamp nehme?

mein befehl sieht ja so aus:
Code:
./tpi_in_response_time.sh -d 071127 -e >/tmp/tpi_in_response_071127

was würde dann anstatt -d 071127 kommen? und wie definiere ich den timestamp so, dass er minus 2 min rechnet?

vielen dank
 
date -d '2 minutes ago'

oder zum finden von Dateien die in den letzten zwei Minuten verändert wurden:

find . -cmin -2 -print

Grüße
Engywuk
 
date '2 minutes ago', das suche ich, aber stimmt der syntax so? kann ich das so schreiben?
 
Der Vorschlag von engywuk macht den besseren Eindruck.

Dein "Befehl" ist ja der Scriptaufruf und nicht der Befehl, den das Script absetzt.

Mein Vorschlag war, die Sekunden im Moment des Scriptaufrufes zu nehmen
Code:
man date
[...]
%s     seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)
Davon wolltest du 2 Minuten = 120 Sekunden in die Vergangenheit rechnen, d.h. diese Zahl minus 120.

Aber find -cmin kann das ja, also warum das Rad neu erfinden...

[edit]
Du übergibst ja das Datum? Das Script kann aber ja selber gucken, wie spät es ist bzw. find guckt beim Aufruf nach diesem Vorschlag. Du übergibst dann also gar kein -d sondern das passiert *im* Script, wie ich die Situation verstehe.
 
Zuletzt bearbeitet:
ich starte sozusagen ein script, welches mir zahlen in ein logfile schreibt. find -min.... klingt noch gut, aber kann ich das dann an den öffnungsbefehl des scriptes anhängen, da ich ja will das er mir nur die zahlen ins logfile schreibt die nicht älter als 2 minuten sind.

ich habe uech ja den befehl schon mal reinkopiert, geht das mit dem?

find . -cmin -2 -print finde ich bei mir gar nicht? stimmt das so?
 
Zuletzt bearbeitet:
ich starte sozusagen ein script, welches mir zahlen in ein logfile schreibt. find -min.... klingt noch gut, aber kann ich das dann an den öffnungsbefehl des scriptes anhängen, da ich ja will das er mir nur die zahlen ins logfile schreibt die nicht älter als 2 minuten sind.

ich habe uech ja den befehl schon mal reinkopiert, geht das mit dem?

Wir reden hier wohl aneinander vorbei ...

Die ursrüngliche Frage war: "da ich nach dem script das datum via -d angebe, sucht er nur die files für das aktuelle datum, aber ich möchte das er es so macht:
nimm das heutige datum und ziehe 2 minuten ab (dh. nur die einträge, welche in der letzten 2 minuten passiert sind). wie kann ich das machen? date -2min? oder so was in die richtung"

Um das heutige Datum zu nehmen und 2 Minuten abzuziehen eignet sich das "date -d '2 minutes ago'"; und "find" um die Files (Dateien!) zu finden, die in den letzten zwei Minuten erstellt bzw. geändert wurden.

Von Zahlen war bisher irgendwie noch nicht die Rede, oder?
Woran erkenne ich denn, wie "alt" die Zahlen sind?

Und was bedeutet "find . -cmin -2 -print finde ich bei mir gar nicht? stimmt das so?" Lautet die Fehlermeldung "command not found" oder "bad option -cmin"?

Grüße
Engywuk
 
Zuletzt bearbeitet:
also damit ihr genau wisst, was ich meine mache ich ein beispiel:

Code:
./tpi_in_response_time.sh -d 071127 -e >/tmp/tpi_in_response_071127
ich mache den aufruf für das script, gebe dort das datum an (entweder man macht es schon hier, oder später)

das system generiert mir folgende ausgabe in ein file hinein:

Code:
Timestamp: Wed, 12 Dec 2007 23:59:57 GMT ID: F.CEE.TPI-IN.spmbs03p.1_19743476454 Request-Type: TPI-SMS-MT Diff time: 990
Timestamp: Thu, 13 Dec 2007 00:00:02 GMT ID: F.CEE.TPI-IN.spmbs03p.1_19743476455 Request-Type: TPI-SMS-MT Diff time: 535
da drin steht dann die zeit oder was auch immmer (man könnte auch mtime nehmen, nicht)

später nehme ich mit awk die letzte zeile (reine zahlen heraus und arbeite mit denen).

jetzt ist wohl die frage, wo man das hineinsetzen soll?

es steht als fehlermeldung folgendes:

find: bad option -cmin
find: path-list predicate-list
 
Zuletzt bearbeitet:
Wir reden hier wohl aneinander vorbei ...
Das glaube ich auch... aber am ehesten, weil doonot darauf beharrt, daß er die Tatsache, daß die Dateien 2 Minuten alt sind, im Scriptaufruf übergeben will. Statt deinen Vorschlägen zu folgen und das Script auf die Uhr gucken zu lassen.

da ich nach dem script das datum via -d angebe, sucht er nur die files für das aktuelle datum, aber ich möchte das er es so macht:
nimm das heutige datum und ziehe 2 minuten ab (dh. nur die einträge, welche in der letzten 2 minuten passiert sind).
Suchen wir Dateien? Ist deren Erstellungszeit das Kriterium? Dann hat engywuk die Antwort ja gegeben.
 
also damit ihr genau wisst, was ich meine mache ich ein beispiel:

Code:
./tpi_in_response_time.sh -d 071127 -e >/tmp/tpi_in_response_071127
ich mache den aufruf für das script, gebe dort das datum an (entweder man macht es schon hier, oder später)

das system generiert mir folgende ausgabe in ein file hinein:

Code:
Timestamp: Wed, 12 Dec 2007 23:59:57 GMT ID: F.CEE.TPI-IN.spmbs03p.1_19743476454 Request-Type: TPI-SMS-MT Diff time: 990
Timestamp: Thu, 13 Dec 2007 00:00:02 GMT ID: F.CEE.TPI-IN.spmbs03p.1_19743476455 Request-Type: TPI-SMS-MT Diff time: 535
da drin steht dann die zeit oder was auch immmer (man könnte auch mtime nehmen, nicht)

später nehme ich mit awk die letzte zeile (reine zahlen heraus und arbeite mit denen).

jetzt ist wohl die frage, wo man das hineinsetzen soll?

WAS soll man WOREIN setzten?

Grüße
Engywuk
 
wenn der cronjob den befehl all 2 minuten laufen lässt, dan sind da alle *dinge* drin, die bei -d xxxxxx definiert wurden sind. ich will, dass dort defniert wird, das nur die genommen werden, von den letzten 2 minuten

was schlussendlich in diesem file drin ist, habe ich gepostet.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

ob du find oder date '2 minutes ago' brauchen willst, ob du es beim script aufruf defnieren willst, oder erst dann, wenn du das erstellte file (mit einträgen drin, unteranderem auch zeit und datum) fertig erstellt hast..
 
Zuletzt bearbeitet:
Wenn mit 071127 07 Uhr 11 Minuten und 27 Sekunden gemeint ist, dann suchsts du folgendes:

Code:
./tpi_in_response_time.sh -d `date '+%H%M%S'` -e >/tmp/tpi_in_response_`date '+%H%M%S'`

Grüße
Engywuk
 
ja aber wie kann ich in dieser Befehlszeile dein date '2 minutes ago' definieren. haben die zahleneinträge am ende des fileinhaltes keinen zeitstempel?

ich habs mal versucht und das bekommen: arg list too long
 
1. Wenn Dein find kein -cmin kann, wird Dein date auch kein -d können ...
2. Wenn Dein Skript hinter -d ein Datum erwartet, wirst Du dort keine Uhrzeit angeben können ...
3. Wenn es Dir nur um die letzte Zeile geht:
Code:
./tpi_in_response_time.sh -d 071127 -e | tail -1 >/tmp/tpi_in_response_071127

Grüße
Engywuk
 
Hallo

Sorry @doonot, aber deine Art der Problemschilderung hat nichts mit Anfänger zu tun.
Es fällt mir sehr schwer zu verstehen, was du nun wirklich willst.
Daran ist nicht zuletzt deine Schreibweise schuld.

Erstens: genaue Problemanalyse:
Zweitens: das Ergebnis dieser in auch für Außenstehende verständliche Worte fassen.
Drittens: Offene Fragen analysieren und Recherche betreiben.

Immer auch mal in die man <command> sehen, und nur was du dort nicht verstehst erfragen.

Dir kann hier keiner das eigenständige Lernen abnehmen.

Zum Thema (oder was ich davon verstanden habe)
Syntax zu find :
Code:
find /path  -cmin <ZAHL> [-(weitere tests)] [AKTION]

Wenn du an einen cronjob als Parameter eine Zeit übergeben willst, stellt das nicht unbedingt das Erwartete dar.
Der Cronjob kann z.B. verzögert starten usw.

Generiere also entweder die Zeit im Script selbst:
Code:
$TIME=$(date -d"2 min ago" +"%Y%M%d%H%m%S");
echo $a
20071913171246

BTW Auch ich habe alles autodidaktisch erlernt, glaube mir es geht.

Gruß Wolfgang
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Solaris 8 - Falsches Datum durch Cronjob

Java Development Kit Installation

Server-Monitoring mit RRDTool

Deutsche Installationsanleitung für Slackware 9.0 (und auch 9.1)

Zurück
Oben