Envoi de la sortie cron dans un fichier avec un horodatage dans son nom

38

J'ai une crontab comme celle-ci sur une configuration LAMP:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Ceci écrit la sortie du fichier dans cron.log . Toutefois, lorsqu’il est exécuté à nouveau, il écrase tout ce qui se trouvait auparavant dans le fichier.

Comment puis-je faire en sorte que cron soit exporté dans un fichier avec un horodatage dans son nom de fichier?

Un exemple de nom de fichier ressemblerait à ceci: 2010-02-26-000000-cron.log

Je me fous vraiment du format, tant qu'il a un horodatage quelconque.

Merci d'avance.

Philip Morton
la source
8
si vous ne voulez $HOME/cron.logpas être écrasé, n'utilisez >>pas>
Dave Cheney Le

Réponses:

66

Essayer:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Jouez avec le format de date, si vous voulez; assurez-vous simplement d'échapper à tout %comme \%, comme ci-dessus.

fission
la source
Et laissez-moi généralement suggérer une approche de noms de fichiers comme 0 0 * * * /some/path/to/a/file.php > $HOME/scriptname-date + \% Y \% m \% d \% H \% M \% S.log
Kristian
Si vous en avez besoin d'un peu plus de lisibilité humaine, essayez: date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cron.log
DevilCode
4
@DevilCode, oui, bien que les espaces dans les noms de fichiers ne soient pas très conventionnels sous Unix. Les traits d' union ou underscores pourrait être une meilleure option: date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log.
fission le
1
Ces personnages d'évasion flippants me prennent toujours. Merci pour le rappel!
Tony-Caffe
14

Je vous recommande fortement de tout sauvegarder dans le même fichier, en utilisant l'horodatage, comme expliqué ici .

retirer

2> & 1

et exécutez-le via le script d'horodatage avant de l'enregistrer dans le fichier journal (comme expliqué dans le lien ci-dessus).

Tony Gil
la source
6

Vous pouvez également ajouter votre sortie au fichier journal en procédant comme suit:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
En pause jusqu'à nouvel ordre.
la source
0

J'ai modifié le script comme ceci:

`/bin/date +\%Y\%m\%d`.log
Ardhy
la source
-2

J'ai résolu ce problème. ajoutez simplement le chemin de date (/ bin / date) avant la commande de date.

utilisateur213005
la source
2
S'il vous plaît ajouter plus d'informations et exemple.
Danijel
-2
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log
Ivan Kovtun
la source
5
Cela nécessiterait beaucoup d'explications.
Sven