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.
#!/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
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
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:
#!/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
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
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
Modifié en dernier par salinois le sam. 6 janv. 2024 16:05, modifié 1 fois.
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
#!/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
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
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
#!/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