il faut utiliser bash!
sh, comme tu viens de t'en apercevoir, n'est pas toujours bash :(
il faut rendre le script exécutable, et ... l'exécuter. ;)
Version imprimable
il faut utiliser bash!
sh, comme tu viens de t'en apercevoir, n'est pas toujours bash :(
il faut rendre le script exécutable, et ... l'exécuter. ;)
Merci, mais au début j'ai fait sous bash test.sh ( le script étant ds /root/test.sh ) ça a retourné à la ligne mais sans le root ~ # donc je pouvais rien faire, jai relancé putty top , rien sur ce script.
le script commence par ne rien faire pendant 2 secondes.
ajoute un set -x sous le shebang, pour voir ce que fait le script.
ok voici:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 root ~ # bash testram.sh + taCommandeAsurveiller=abc ++ pgrep abc + pidCmd=20273 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/21969/status + test 1392 -ge 1000000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/21969/status + test 1416 -ge 1000000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/21969/status + test 1416 -ge 1000000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/21969/status + test 1416 -ge 1000000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/21969/status + test 1416 -ge 1000000 + sleep 2 ...
apparemment, tout se passe bien.
ok mais pourquoi ensuite ça ne me retourne pas sur ligne "root ~ #"? Par exemple une fois avoir lancé le script, faire root ~ # top pour voir s'il fonctionne. J'ai relancé putty fait root ~ # top mais pas de testram toutes les 2 secondes...
le script est en cours d'exéution.Citation:
mais pourquoi ensuite ça ne me retourne pas sur ligne "root ~ #"?
le script ne consomme pas assez de ressources pour apparaîtreCitation:
Par exemple une fois avoir lancé le script, faire root ~ # top pour voir s'il fonctionne. J'ai relancé putty fait root ~ # top mais pas de testram toutes les 2 secondes...
...
?
D'accord, mais y a t-il un moyen de connaitre les scripts qui tournent? Même ceux qui demandent peu de ressource.
J'ai du lancer 2 fois le script, comment les "kill" afin de modifier le script, mettre une alerte a 10mo de ram comme ça je vois si ça marche.
edit:
Le pid serait 103236 ? une preuve que le script tourne ?Code:
1
2
3
4
5
6 root ~ # ps aux | grep testram root 27649 0.0 0.0 103236 888 pts/0 S+ 02:09 0:00 grep testram root ~ # ps aux | grep testram root 27712 0.0 0.0 103236 888 pts/0 S+ 02:09 0:00 grep testram root ~ # kill 103236 -bash: kill: (103236) - No such process
Donc rien, il tourne pas?Code:
1
2
3
4 root ~ # killall -9 testram testram: no process killed root ~ # killall -9 testram.sh testram.sh: no process killed
edit2:
J'ai relancé le script à 10mo alors que le programme en question est actuellement à 30mo et rien.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 root ~ # bash testram.sh + taCommandeAsurveiller=abc ++ pgrep abc + pidCmd=24702 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/29863/status + test 1388 -ge 10000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/29863/status + test 1412 -ge 10000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/29863/status + test 1412 -ge 10000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/29863/status + test 1412 -ge 10000 + sleep 2 + read _ rss _ ++ grep VmRSS /proc/29863/status + test 1412 -ge 10000 + sleep 2 ...
comment connais-tu ces 30mo ?
Pour info:
ça retournera sur la ligne "root ~ #" (comme tu dis), lorsque l'exécution du programme sera terminée!
Avec un while sleep 1, ça n'est pas près d'arriver!!! :D
Pour ça, il faut lancer le script en tâche de fond (en background). 2 possibilités:Citation:
Par exemple une fois avoir lancé le script, faire root ~ # top pour voir s'il fonctionne.
- taper au terminal testram.bash & l'ampersand indique le job doit tourner en background.
- ou bien lancer le job normalement testram.bash puis le suspendre avec Ctrl-z et le passer en background avec la commande bg.
Dans ces 2 cas, au moment où le terminal ayant initié le job rend la main, tu dois voir apparaître le numéro du job (qui n'est pas le pid). Tu peux avoir la liste des jobs en cours (uniquement du terminal courant) avec la commande job et avoir son pid avec la commande ps (sans aucun argument) lancée depuis le terminal. (voir la partie "job control" du man du shell courant).
Tu peux configurer 'top' pour changer l'ordre (par exemple utiliser l'ordre alphabétique et tu le verras en permanence (surtout si tu l'as renommé "atestram", par exemple)).Citation:
J'ai relancé putty fait root ~ # top mais pas de testram toutes les 2 secondes...
:oops: j'ai corrigé le script que j'avais donné, car au lieu de retourner la vmRSS de la commande, il utilisait celle du script ($$).
C'est grâce à top, le programme que je dois surveiller tourne à 30 mo au début. Pour un test il suffit de lancer le script que vous avez fait ( et corrigé ) à 10mo par exemple et l'on voit le résultat directement.
Je mets toujours ça sous l’extension .sh ? Dans le dossier root. Je le lance via bash testram.sh et c'est bon il tourne en fond sur le serveur ? Il s’arrêtera quand la ram aura atteint la limite ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/bin/bash taCommandeAsurveiller=abc pidCmd=$(pgrep $taCommandeAsurveiller) while sleep 2 do read _ rss _ < <(grep VmRSS /proc/$pidCmd/status) test $rss -ge 1000000 && { # kill $pidCmd mail -s "alerte" user@localhost <<<"$rss" exit } done
Remarque à 2 balles:
Je ne connais pas bien 'proc' mais je doute que 1000000 (avec 6 zéros) corresponde à 10mo
Sous linux, l'extension n'a (quasiment (en tout cas, sur l'exécution)) aucune importance. Tu peux même choisir de ne mettre aucune extension. ça sert d'indication ou de repère pour les mainteneurs et pour les éditeurs (emacs et vim). Ce qui compte, c'est le shebang #!/bin/bash en tant que toute première ligne du script.Citation:
Je mets toujours ça sous l’extension .sh ?
Si tu veux qu'il tourne en fond, voir mon post précédent.Citation:
Dans le dossier root. Je le lance via bash testram.sh et c'est bon il tourne en fond sur le serveur ?
Mais, même s'il ne tourne pas en fond, c'est bon! C'est juste que tu ne récupèreras pas la main dans CE terminal et qu'il sera un peu plus difficile de retrouver le processus.
Par contre, si tu killes le terminal, je ne sais pas s'il continue... :oops:
Oui, grâce à l'instruction exit. :ccool:Citation:
Il s’arrêtera quand la ram aura atteint la limite ?
Oui 1000000 c'est go je parlais de mettre à 10mo pour est sur que ça marche.
Pour l'extension ok.
C'est ce qui me dérange un peu, ça peut durer plusieurs jours avant qu'il n'atteint cette valeur donc il faudrait quand je ferme putty il tourne toujours.Citation:
Par contre, si tu killes le terminal, je ne sais pas s'il continue...
Salut,
Utilise screen qui permet de détacher les terminaux.Citation:
Envoyé par maloy
Salut,
Donc avec screen je l’exécute, je ferme tout et ça tourne toujours?
Salut,
- Tu lance screen
- Tu exécute ta commande
- Tu détache screen
- Tu ferme putty
Cette doc de chez ubuntu devrait t'éclaircir le fonctionnement de screen.