Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

heeelp SHELL

94 réponses
Avatar
yvslart
bonjour tout le monde,
J esp=E8re trouver r=E9ponse =E0 mes questions sur ce forum et j esp=E8re
que
vous aurez un peu de patience parce que je suis d=E9butante en
programmation et j aimerai faire un programme qui semble un
peu .....dur puisque je n ai pa encore trouver de r=E9ponses!
Bon on suppose qu on est l administrateur d un parc informatique et
qu on veut:
1.Etre alert=E9 par e mail si jamais :
-l un des utilisateurs a d=E9pass=E9 le quota ceci dit 1Mo
-ou bien s il a d=E9pass=E9 1000 copies d impression

2.Eteindre tous les ordinateurs chaque vendredi =E0 19h
3.Faire une sauvegarde de donn=E9es de chaque ordinateur et l
enregistrer dans un r=E9pertoire qui aura de nom la date du jour o=F9 la
sauvegarde a =E9t=E9 faite et ce r=E9pertoire doit avoir pour
extension .tgz
(archiv=E9 et compress=E9)
Je note que cette sauvegarde doit aussi se faire chaque dimanche =E0
minuit.
Voil=E0 ceci est le programme et j ai des difficult=E9s avec ....je sais
que je dois utiliser le CRONTAB pour les taches planifi=E9es mais =E0
part
sa....rien!!!
Plz help et je vous remercie =E0 l avance

10 réponses

Avatar
yvslart
En fait pour l'impression j'ai trouvé le moyen de définir la période
mais le problème c'est qu'elle soit être entrée en secondes!! un jour
=†.400 sec donc un an !!!!
-->Est-ce qu'on est obligé de faire le calcul ou bien on peut
l'entrer autrement?

-->Je pense que maintenant pour l'impression c'est ceci:
lpadmin -o job-page-limit00 quota-period=!!!!(en attendant vos
rép)
lpadmin -A 'mail `logname`' -W 30 ##envoyer un mail à
l'utilisateur chaque 30 min
Avatar
yvslart
Sa par contre je ne pourrai pas le tester je n'ai pas d'imprimante
mais je suis sure que grâce à votre expérience vous pouvez savoir si
sa peut fonctionner ou pas.
Avatar
Bruno Tréguier
Le 15/01/2010 à 21:27, yvslart a écrit :

Donc erreur dans TAILLE=$(du -s -k /home |cut -f1) ?



Là il n'y a pas d'erreur... En revanche, reprenez ce que vous aviez
écrit précédemment, vous verrez que cette ligne n'est pas identique à la
version précédente.

Cordialement,

Bruno
Avatar
Cyrille Lefevre
yvslart a écrit :
En fait pour l'impression j'ai trouvé le moyen de définir la pér iode
mais le problème c'est qu'elle soit être entrée en secondes!! un jour
=†.400 sec donc un an !!!!
-->Est-ce qu'on est obligé de faire le calcul ou bien on peut
l'entrer autrement?



pour faire des calculs, nous avons 3 formes :

l'ancienne :

sec`
heure=$(expr $sec * 60)
jour=$(expr $heure * 24)
annee=$(expr $jour * 365)

PS : j'ai fait le fainéant, je n'ai pas mis nis les {}, ni les " :-)
par ailleurs, nous laissons de côté les années bissextiles !

la nouvelle, posix compliant :

sec`
heure=$(( $sec * 60 ))
jour=$(( $heure * 24 ))
annee=$(( $jour * 365 ))

note les double (( )) précédé d'un $

la façon ksh ou bash, non portable :

sec`
(( heure = $sec * 60 ))
(( jour = $heure * 24 ))
(( annee = $jour * 365 ))

qui peut également s'écrire :

sec`
(( heure = sec * 60 ))
(( jour = heure * 24 ))
(( annee = jour * 365 ))

PS : pas besoin de $ si les variables représentent un entier.

la forme (( ... )), peut également s'écrire let "...", mais j'aime mo ins.

certaines contractions sont supportées, d'autres non :

temps`
# ajout de 1, ksh, bash
(( temps = temps + 1 ))
# par contraction, ksh, bash
(( temps += 1 ))
# idem, pdksh, bash, ksh93, mais pas ksh88
(( temps++ ))

-->Je pense que maintenant pour l'impression c'est ceci:
lpadmin -o job-page-limit00 quota-period=!!!!(en attendant v os
rép)
lpadmin -A 'mail `logname`' -W 30 ##envoyer un mail à
l'utilisateur chaque 30 min





Hi, Bonjour,



Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Avatar
Benoit Izac
Bonjour,

le 15/01/2010 à 23:01, Cyrille Lefevre a écrit dans le message
<hiqoht$315p$ :

pour faire des calculs, nous avons 3 formes :

l'ancienne :

sec`
heure=$(expr $sec * 60)
jour=$(expr $heure * 24)
annee=$(expr $jour * 365)

PS : j'ai fait le fainéant, je n'ai pas mis nis les {}, ni les " :-)
par ailleurs, nous laissons de côté les années bissextiles !

la nouvelle, posix compliant :



En quoi la précédente n'est pas conforme à POSIX ?

sec`
heure=$(( $sec * 60 ))
jour=$(( $heure * 24 ))
annee=$(( $jour * 365 ))



Ajoutons bc(1) lorsque l'on veut faire des calculs avec autre chose que
des entiers.

--
Benoit Izac
Avatar
Cyrille Lefevre
yvslart a écrit :
Salut tout le monde je voulais vois dire qu'en surfant (afin de
trouver cette fameuse commande de "du") j'ai trouvé un programme qui
permet de déterminer un pourcentage de l'espace utilisé de mon
répertoire et d'envoyer un mail si je l'atteins :
Le voilà

#! /usr/bin/ksh



beurk, pour du "korn shell", j'ai vu mieux...

typeset fs_to_look="/soft /data"
typeset -i percent_used_warn
typeset result=""
typeset tmp=""
typeset msg="l'espace utilise sur $curr_to_look est supp a
$percent_used_warn%"

df -k |
while read curr_fs
do
for curr_to_look in $fs_to_look
do
tmp=$(
echo $curr_fs |


manque les "
awk ' $( NF )=="'"$curr_to_look"'" { print $4 } '


quid si le résultat de df est sur 2 lignes :

/long/path/to/dev
size used avail %use /path/to/mount/point

au lieu de

path/to/dev size used avail %use /path/to/mount/point

)


>
[ -z "$tmp" ] && continue

[ "`echo $tmp | sed 's:%::g'`" -ge "$percent_used_warn" ] &&



en ksh, "`echo $tmp | sed 's:%::g'`" doit s'écrire :
tmp=${tmp%%} # ou tmp=${tmp%[%]}
en ksh, [ ... -ge .. ] doit s'écrire :
(( ${tmp%%} > $percent_used_warn ))

result="$result `eval echo $msg`"



admettons, mais avec des $() alors.

done
done

[ ! -z "$result" ] && echo "`date +%D`: $result"



attention, la construction commande | while ... ne fonctionne pas sous
tous les shells. sous bash, pas ex., la partie droite est exécutée da ns
un sous-shell, alors qu'en ksh, est est exécuté dans le shell courant .
la différence est primordiale, dans le sens ou les affectations de
variables dans la partie droite ont lieu dans le shell courant ou non.
autrement dit, cette construction est à éviter absolument. on lui
préfèrera la construction suivante :

save_dev=
while read dev size used avail percent mnt; do
if [[ -z $size ]]; then
save_dev=$dev
continue
elif [[ -n $save_dev ]]; then
dev=$save_dev
mnt=$percent
percent=$avail
avail=$used
used=$size
size=$dev
fi
...
done << EOF
$(df -k)
EOF

Qu'est-ce que vous en pensez?( à la place de /soft/data je mets /
home)
Alors maintenant soit :
-je cherche une commande pour entrer à la place du pourcentag e
une valeur (comme sa je mets 1 Mo)
-soit je cherche une commande pour limiter l'espace du /home à
1Mo et je laisse les pourcentages



d'après ce que j'ai compris dans ton énoncé initiale, il s'agissait de
quota, alors que l'exemple que tu as trouvé concerne la volumétrie d' un
fs (système de gestion de fichiers pour les puriste, sgf en français
dans le texte :-).
un quota ne concerne qu'un utilisateur donnée, un sgf, concerne tous le s
utilisateurs de ce dernier.

2 solutions, la façon pauvre, surement ce que tu dois faire, et la faç on
académique, direction man quota

à propos des quota système, attention, il y a 2 limites, la soft et l a
hard. il est possible d'augmenter sa consommation d'espace tant que l'on
est en dessous de la limite hard, le système émet un warning entre la
limite soft et la hard, en dessous de la limite soft, R.A.S.

dans ton cas, ce sera plutôt donc direction man du -s pour chaque
utilisateur à comparer avec la limite que l'on te donne. attention, le
home d'un utilisateur n'est pas nécessairement /home/utilisateur, cf ma n
5 passwd

Il y a certainement de l'idée ;) ......mais à vous de me mettre
sur la bonne voie.

Sinon d'après vos commentaires et suggestions :

TAILLE=$(`du -s -k /home | cut -f1`)


c'est sois les `(backquote), soit les $(), mais pas les deux à la fois.
if [ "${TAILLE}" -ge 1000 ]
then
mail -s "attention" <sujet_mail
fi

-->J'ai trouvé que pour GNU -k permet de donner les résultats e n
kilo bytes et puis le -s affichait seulement le total pour chaque
argument.(plus besoin de cut je pense!)



tu as même l'option -h pour human readable qui adapte l'unité en
fonction de la taille. pour autant, reste en -k, plus facile pour
scripter car il n'y a pas de suffixe tel que K, M, G, etc.

-->Est- ce que je dois mettre les `` ou non?

Je vous remercie tous et toutes pour votre aide .





Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Benoit Izac
Bonjour,

le 16/01/2010 à 00:19, Cyrille Lefevre a écrit dans le message
<hiqt55$iep$ :

Ajoutons bc(1) lorsque l'on veut faire des calculs avec autre chose que
des entiers.



pourquoi pas dc(1) :-)



Parce qu'il n'est pas POSIX (et qu'il me fait mal à la tête).

--
Benoit Izac
Avatar
yvslart
Merci les gars je l'ai fait mais autrement puisque le but en question
est de calculer les secondes donc d'entrer la valeur de l'année.

Ceci est ce que j'ai fait et sa a marché:
annee=$1
((jour = annee * 365 ))
((heure = jour * 24 ))
((sec = heure * 3600 ))
echo $sec

Donc maintenant je peux faire sa:
lpadmin -o job-page-limit00 quota-period=$(./essai 1) ##une anné e
lpadmin -A 'mail `logname`' -W 30

Avez-vous des suggestions, des commentaires?

Et pour le programme que j'ai trouvé ne vous cassez pas la tête avec
je préfère en faire un que je comprends parfaitement que d'en "piquer"
à quelqu'un d'autre.
Merci à Cyrille et Izac.
Avatar
Benoit Izac
Bonjour,

le 16/01/2010 à 12:40, yvslart a écrit dans le message
:

Ceci est ce que j'ai fait et sa a marché:
annee=$1
((jour = annee * 365 ))
((heure = jour * 24 ))
((sec = heure * 3600 ))
echo $sec

Donc maintenant je peux faire sa:
lpadmin -o job-page-limit00 quota-period=$(./essai 1) ##une année
lpadmin -A 'mail `logname`' -W 30

Avez-vous des suggestions, des commentaires?



Pour moi, c'est beaucoup plus clair et surtout conforme à POSIX (relit
le message de Cyrille) si c'est écrit :

max_pages00
period=$((365 * 24 * 60 * 60)) # une année
lpadmin -o job-page-limit="$max_pages"
-o job-quota-period="$period"

ou

# 1000 pages maximum pour une année
lpadmin -o job-page-limit00
-o job-quota-period=$((365 * 24 * 60 * 60))


PS : encore un petit effort pour remplacer les « sa » par des « ça » (ça
me hérisse les poils).
--
Benoit Izac
Avatar
yvslart
Pour le répertoire de l'utilisateur merci Cyrille parce que je ne
savais pas que sa pouvait être différent donc je suppose que je vais
faire ceci :
REP=$(` grep " `logname`" /etc/passwd | cut -d ':' -f6 `)

et après :
TAILLE=$(`du -s -k $REP | cut -f1`)
if [ "${TAILLE}" -ge 1000 ]
then
mail -s "attention" <sujet_mail
fi


Pour le man quota je l'ai lu et relu et tout ce que j'ai pu capter
c'est que:
-->quand quota est différent de zéro alors il y a over quota (On
pourra alors utiliser sa comme condition)
-->quota -p (donne la durée de temps qui reste avant qu'il soit over
quota)
Bon j'ai pas vraiment compris ........

Est-ce que je dois utiliser quotactl?