Résolu le 14-01-24 Script en bash

Postez ici vos scripts Bash, Python, etc.
Avatar du membre
cyrille
Administrateur du site
Messages : 12443
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script en bash

Message par cyrille »

Dernier message de la page précédente :

Donc le but

1/c'est d'aller dans /var/lib/weewx

2/ Il contient des fichiers avec extensions for *.sdb

3/ Tu récupères leur date d'accès et ne prends que si plus vieux que 10 minutes

C'est bien ça ?
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
oui

le fichier s'appelle weewx.sdb dans le repertoire cité /var/lib/weewx/.

le programme "meteo" met à jour ce fichier toutes les 5 mn et ce plugin est censé verifier que la base de données
se mets bien à jour, en gros d'apres ce que j'ai compris, si au bout de 10 mn , il ne s'est pas mis à jour, c'est qu'il y a un pb.

voilà

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

Avatar du membre
cyrille
Administrateur du site
Messages : 12443
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script en bash

Message par cyrille »

salinois a écrit :
sam. 6 janv. 2024 16:37
le fichier s'appelle weewx.sdb dans le repertoire cité /var/lib/weewx/.
Pourquoi alors boucler sur la totalité des fichiers contenu dans /var/lib/weewx/ si tu connais le nom exact du fichier ?

Le programme "meteo" met à jour ce fichier toutes les 5 mn et ce plugin est censé verifier que la base de données
se mets bien à jour, en gros d'apres ce que j'ai compris, si au bout de 10 mn , il ne s'est pas mis à jour, c'est qu'il y a un pb.
Essaie déjà lignes par lignes dans un terminal (on va travailler en temps unix Epoch https://fr.wikipedia.org/wiki/Heure_Unix )

Définir une variable

Code : Tout sélectionner

FILE=/var/lib/weewx/weewx.sdb
Test du dernier accès à ce fichier

Code : Tout sélectionner

stat -c "%Y" $FILE
Doit te retourner une valeur numérique correspondant à son dernier accès

Code : Tout sélectionner

1704554014
Recupération de la date actuelle

Code : Tout sélectionner

date +%s
Doit te retourner une valeur (supérieure) style

Code : Tout sélectionner

1704556203
Tu fais la différence entre elles et fais un test par rapport à la valeur que tu souhaites (5 minutes, 10 minutes)

Et voilà tout simple, par toujours évident de partir sur un script d'un autre quand on débute, mieux vaut y aller étapes par étapes et bien comprendre ce que l'on fait ;)
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
j'ai fais ce que tu m'as dit, c'est bon; les valeurs affichées sont à peu pres comme les tiennes, cela depend de l'heure , evidemment.

donc apres je mets les lignes qu'il a mis pour la calculer difference et pour afficher "Error ou OK" , donc la fin de son script ?
j'ai bon ?

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

script modifié

Code : Tout sélectionner

#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file-was-last-modifi>
#
FILE=/var/lib/weewx/weewx.sdb
stat -c "%Y" $FILE
date +%s
do
  DIFF="$(($(date +%s) - $(date -r"${FILE}"+%s)))"
  if [ ${DIFF} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${DIFF} seconds ago"
done
echo ""
erreur:
1704557717
1704557895
secs-since-modified_1.sh: ligne 8: erreur de syntaxe près du symbole inattendu « do »
secs-since-modified_1.sh: ligne 8: `do'

pb de parentheses !!!!

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
je suis en train de chercher sur la ligne DIFF !!, je pense
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

bon,
je crois que c'est bon
voilà le fichier

Code : Tout sélectionner

#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file-was-last-modifi>
#
FILE=/var/lib/weewx/weewx.sdb
NOW="$(date +%s)"
LMD="$(stat -c %y ${FILE})"
LMDE="$(date +%s --date="$LMD")"

  diff=$(($NOW - $LMDE))
  if [ ${diff} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${diff} seconds ago"
echo ""
resultat:
bash secs-since-modified_3.sh
OK /var/lib/weewx/weewx.sdb was last modified 4 seconds ago

j'ai vérifié, quand j'ai arrêté le progr qui met à jour la base de données, cela a affiché Error.

dis-moi ce que tu en penses, syntaxe etc.

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

Avatar du membre
cyrille
Administrateur du site
Messages : 12443
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script en bash

Message par cyrille »

Je pense qu'il faut qque tu reprennes les bases du BASH car là tu copies colles sans trop réfléchir aux commandes, ça ne marchera jamais
Les commandes suscitées sont à affecter à des variables que tu réinjectes dans tes procédures

Code : Tout sélectionner

#!/bin/bash

FILE=/var/lib/weewx/weewx.sdb

dateModif=$(stat -c "%Y" $FILE)
dateActuelle=$(date +%s)

tempsPasseSec=$(($dateActuelle - $dateModif))


# debugg
echo Modif: $dateModif
echo Actuelle : $dateActuelle
echo Tps passe : $tempsPasseSec


# 10 minutes 6000 Secondes
lapDeTemps=6000

if [ $tempsPassSec -gt $lapsDeTemps ]
	then
		echo "Temps supérieur au laps défini"
		# Ici les actions que tu souhaites alors
	else
		echo "Temps inférieur au laps défini"
		# Idem les actions à lancer
fi
Débuter en bash
https://cbiot.fr/dokuwiki/php-bash:aide ... ation_bash


N'hésite pas si soucis
Mais pars du plus simple !
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 12443
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script en bash

Message par cyrille »

Désolé je tapais en même temps que toi, donc jette un oeil à mon script pour la syntaxe ;)
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

ok, pas de probleme

car cela fonctionne, apparemment.
juste comme ça ,600 sec = 10 mn :D :D :D

merci de ton aide
je vais quand même regarder ton lien

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

merci à Cyrille et Alain.
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry

Répondre