Page 1 sur 2
Script en bash
Posté : ven. 5 janv. 2024 20:43
par salinois
bonjour,
un ami m'a donné un script en bash pour tester des valeurs sur un fichier de base de données
mais j'ai des erreurs quand je le lance. voici le script et les erreurs.
Code : Tout sélectionner
#!/bin/bash
#
#
cd /usr/lib/weewx # le repertoire où se situe mon fichier de base de données
echo ""
for FILE in *.sdb
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 ""
et les erreurs:
/usr/local/nagios/libexec $ bash secs-since-modified.sh
secs-since-modified.sh: ligne 8: erreur de syntaxe près du symbole inattendu « $'do\r' »
'ecs-since-modified.sh: ligne 8: `do
je débute en programmation , j'ai essayé de chercher mais en vain.
dites-moi si la présentation du post est à améliorer.
merci à vous
salinois
Re: Script en bash
Posté : sam. 6 janv. 2024 05:54
par alain
Bonjour Salinois
salinois a écrit : ven. 5 janv. 2024 20:43
secs-since-modified.sh: ligne 8: erreur de syntaxe près du symbole inattendu « $'do\r' »
'ecs-since-modified.sh: ligne 8: `do
je suis nul en script bash et en programmation en général.
Mais j'ai eu une fois ce problème en recopiant un script sur windows.
Le symbole inattendu est un retour chariot de windows et non un retour à la ligne de linux.
Ne me demande pas en quoi c'est différent, je n'en sais rien. Une recherche sur le web pourrait certainement nous le dire
Bref la solution dans mon cas (merci Arghlub) à été de remplacer les retours chariot de windows par des retours linux:
ou plus précisément pour toi:
Re: Script en bash
Posté : sam. 6 janv. 2024 11:56
par salinois
merci alain,
j'ai fais ça, effectivement bizarre;
bon maintenant , j'ai d'autres erreurs.
Code : Tout sélectionner
#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file->
#
cd /var/lib/weewx
echo ""
for FILE in *.sdb
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 ""
erreurs:bash secs-since-modified.sh
date: weewx.sdb+%s: Aucun fichier ou dossier de ce type
secs-since-modified.sh: ligne 9: 1704538488 - : erreur de syntaxe : opérande attendu (le symbole erroné est « - »)
on dirait que la commande "cd /var/lib/weewx " ne passe pas !!!
salinois
Re: Script en bash
Posté : sam. 6 janv. 2024 13:42
par salinois
bonjour cyril
c'est ce que j'ai fait, une erreur a disparu mais d'autres sont arrivées.
je vais regarder tes conseils.
patrick
Re: Script en bash
Posté : sam. 6 janv. 2024 15:57
par salinois
re,
pardon, je croyais les avoir mises, les voici
bash secs-since-modified.sh
date: weewx.sdb+%s: Aucun fichier ou dossier de ce type
secs-since-modified.sh: ligne 9: 1704552999 - : erreur de syntaxe : opérande attendu (le symbole erroné est « - »)
pour le GT 600 , à vrai dire je sais pas trop ( c'est un ami américain qui m'a passé le script ) ; en gros c'est pour vérifier le fichier de la base de données, si celui se met bien à jour toutes les 5 mn.
voici la traduction de ce qu'il m'a mis en anglais, pour le script.
[Voici un script rapide pour imprimer les secondes depuis la dernière modification d'un fichier et se plaindre si cela dure plus de 10 minutes, à titre d'exemple.
FWIW - Je vérifierais que l'archive est en cours de modification et que le dernier skin de votre ordre typique se termine avec succès.
Cet exemple vérifie simplement que le(s) fichier(s) sdb sont en cours de mise à jour.]
j'espere être assez clair. dis le moi.
salinois
Re: Script en bash
Posté : sam. 6 janv. 2024 16:13
par salinois
voila le scrip apres avoir effectué les modifs conseillées par Alain.
Code : Tout sélectionner
#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file-was-last-modified-in-seconds-with-bash
#
cd /var/lib/weewx
echo ""
for FILE in *.sdb
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 ""
Pour le gt 600 ( ce n'est pas moi qui fait le script, pas assez bon en programmation) , je pense que cela doit correspondre à 600 sec ( 10 mn)
la base de données se met à jour toutes les 5 mn.
salinois
Re: Script en bash
Posté : sam. 6 janv. 2024 16:37
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
Re: Script en bash
Posté : sam. 6 janv. 2024 17:10
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
Re: Script en bash
Posté : sam. 6 janv. 2024 17:18
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
Re: Script en bash
Posté : sam. 6 janv. 2024 17:30
par salinois
re,
je suis en train de chercher sur la ligne DIFF !!, je pense