[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] si mon fichier contient la premiere ligne





On 06/02/2017 09:10 AM, David Martin wrote:
Tu avais raison, avec le \n ça fonctionne j'ai bien le compteur à 1

on peut utiliser l'astuce donnée par David Chalon faire un grep

[ "$(grep utilisateur BatchMajInfoUtilisateurEmargos20170602090001.log | wc -l)" == "1" ] && echo 'ok' || echo 'KO'

devrait marcher.

Je vais remonter cette annomalie pour qu'il rajoute le \n dans le fichier généré,

en attendant on me demande de faire une moulinette qui vérifie que le script qui génère ce fichier
soit bien exécuter toutes les 15 mintues. voici son vrai nom :

voici : BatchMajInfoUtilisateurEmargos20170602090001.log

C'est ce fameux fichier qui doit contenir le \n

Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier
qui contiendrait la date du jour + heure et minute du genre

je ne comprends pas trop le problème. Je veux dire tu veux savoir si le fichier a été crée il y a moins de 15 minutes. En unix on ne connait pas la date de création d'un fichier mais en fait dans ton cas cela ne doit pas être un problème car j'imagine que la moulinette réécrit le meme fichier à chaque fois.

donc la commande stat doit pouvoir etre utiliser

par exemple

stat toto.txt

renvoie

  File: toto.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fe01h/65025d    Inode: 537127084   Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/     AAAA)   Gid: ( 1001/ AAAA)
Access: 2017-06-02 11:21:00.848700391 +0200
Modify: 2017-06-02 11:21:00.848700391 +0200
Change: 2017-06-02 11:21:00.848700391 +0200
 Birth: -

donc les date d'Acces de modification et de changement sont les meme. C'est la date de creation. Comme tu modifie pas le fichier à priori on doit pouvoir utiliser la date de modify.

On peut donc utiliser le script suivant.

# on recupere la valeur de modify et on extrait la date que l'on converti en timestamp (durée en seconde depuis 1970)
stattime=$(date -d "$(stat toto.txt | grep Modify | cut -c8-27)" +%s)

# on fait la différence entre la date courante et la date de modification de fichier.
diff=$(( $(date +%s) - $stattime ))


# on calcule si cette difference est superieur a 15*60 secondes
[ $diff -gt 600 ] && echo "more than 600" || echo "less than 600"



Tu mets ces lignes et tu lance un cron toute les x minutes qui verfie que tout est bon et si cela dépasse 15 minutes (le truc more than 600) tu fais quelque chose (envoi d'un courriel ou autre).

Bien sur il faut tester le truc et faire attention au fait que je teste le fichier toto.txt et pas ton fichier.

Le | grep Modify récupére la chaine de caractères Modify de la commande stat et le cut -c8-27 récupére la chaine de caractères entre la 8 et la 27 eme position de la chaine initiale. Il faut bien regarder si cela colle avec la sortie de stat sur ta machine. Le timestamp est utile car comme cela on ne fait qu'une soustraction en seconde.

Je suis pas très bon en bash et il faut peut être rajouter des tests pour être sur que le fichier existe ou autre subtilités.

Desolé si j'ai pas bien compris le problème


L.


Reply to: