Cronjob mit Datum loggen

DVNO

DVNO

Aktives Mitglied
Thread Starter
Dabei seit
13.10.2010
Beiträge
127
Reaktionspunkte
1
Hallo,
ich habe einen Cronjob erstellt, dessen Ausgabe in einer Logdatei gespeichert wird:

Code:
*/5 * * * * php /Users/pfad_zu_ordner/artisan schedule:run >> /Users/pfad_zu_logs/Crontab.log 2>&1

Mein Problem ist allerdings, dass die Logdatei ohne Datumsangabe vor den einzelnen Logs ziemlich unübersichtlich ist. Es gibt leider keine Möglichkeit das Datum schon an die Ausgabe zu hängen. Kann ich das irgendwie anders machen?
 
Pack »(date '+%FT%T%z'; php /Users/...) >> logfile« in ein shell script und trag' das als cron job ein.
 
  • Gefällt mir
Reaktionen: DVNO
Vielen Dank, das funktioniert:
Code:
#!/bin/sh

DATE=$(date +"%d.%m.%Y %H:%M")
DATE_FORMATTED="[${DATE}]"

LOG="/Users/.../Crontab.log"
ARTISAN="/Users/.../artisan schedule:run"

echo "\n${DATE_FORMATTED}" >> ${LOG}
php ${ARTISAN} >> ${LOG}

Zwei Probleme habe ich allerdings noch:
  1. Ist es möglich einen relativen Pfad für die Logs und Artisan anzugeben? Die sh-Datei liegt im selben Ordner wie Artisan. Wenn ich "./artisan schedule:run" oder nur "artisan schedule:run" als Pfad angebe, bekomme ich die Fehlermeldung "Could not open input file: artisan".
  2. Vor dem Output steht jetzt immer "" und danach "[39m". Wie bekomme das weg?
 
Code:
#!/bin/[COLOR=#ff0000]ba[/COLOR]sh

DATE="$(date +[COLOR=#ff0000]'[/COLOR]%d.%m.%Y %H:%M[COLOR=#ff0000]'[/COLOR])" 

LOG="[COLOR=#ff0000]${0%/*}[/COLOR]/crontab.log"
ARTISAN="[COLOR=#ff0000]${0%/*}[/COLOR]/artisan schedule:run"

{ echo -e "\n${DATE}"; php "${ARTISAN}"; } >> "${LOG}"
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: DVNO
Vielen Dank.
Und du weißt nicht, wo "[32m" und "[39m" im Output herkommt? Das taucht beim direkten Aufruf per Cronjob nicht auf.

Code:
[32mNo scheduled commands are ready to run.[39m

Edit:
Wofür ist echo -e "..."?
 
Hab oben editiert.

Ohne -e geht \n nicht.
 
Das \n hat schon vorher funktioniert. Jetzt wird -e mit ausgegeben. :)
Mein letztes Problem ist eigentlich nur noch "[32m" und "[39m".

Edit:
Ich habe das hier gefunden: http://wiki.bash-hackers.org/scripting/terminalcodes
Das scheinen Farbangaben zu sein. Ich guck mal, ob ich sie entfernen kann.
 
Hast du auf bash umgestellt? Zeig' nochmal dein script.
 
Das ist eine Shell-Datei:

Code:
#!/bin/sh

DATE="[$(date +'%d.%m.%Y %H:%M')]"

LOG="${0%/*}/storage/logs/schedule.log"
ARTISAN="${0%/*}/artisan schedule:run"

echo "\n${DATE}" >> ${LOG}
php ${ARTISAN} >> ${LOG}

Aber "No scheduled commands are ready to run." ist grün, wenn es direkt im Terminal ausgegeben wird.
 
Das \n hat schon vorher funktioniert. Jetzt wird -e mit ausgegeben. :)
Mein letztes Problem ist eigentlich nur noch "[32m" und "[39m".

Statt artisan rufst du einfach artisan --no-ansi auf, dann werden die Farbcodes nicht ausgegeben :)
 
  • Gefällt mir
Reaktionen: DVNO
Es steht immer noch auf sh, nicht auf bash. Was machen die eckigen Klammern um's date?
 
Warum nicht einfach 'syslog' oder 'logger' nehmen?

Wenn es nicht zwingend ein eigenes Logfile sein muss, dann kannst du damit deine logs besser ins System integrieren und mit den üblichen Tools wie z.B. mit Konsole handhaben.

Mit

Code:
syslog -s -k Sender artisan Level 4 Message "deine log messages"

schreibst du eine Warning-Message (=Level 4) in /var/log/syslog als eine sauber formartierte Log-Message. Und das berücksichtigt dann halt auch alle systemweiten Einstellungen, die du vielleicht mit 'syslog -c <level>' vorgenommen hast.

Und mit

Code:
syslog -k Sender artisan

kannst du alle Log-Messages von artisan per commandline wieder auslesen oder eben auch, wenn du eine GUI willst, mit Konsole und nach 'artisan' filtern.

'logger' ist einfach ein keines Tool, dass die Parameter zu syslog etwas vereinfacht. (wobei ich finde, das syslog so kompliziert nun auch wieder nicht ist)

Mehr Infos dazu geben die manpages von syslog und logger her.
 
Zurück
Oben Unten