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.
ok voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...
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.mais pourquoi ensuite ça ne me retourne pas sur ligne "root ~ #"?
le script ne consomme pas assez de ressources pour apparaîtrePar 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...
Salut,
Non, ça c'est le PID de grepenfin c'était puisqu'il n'existe plus du fait que la commande s'est achevée
Pour empêcher "ps" de retourner le PID de grep et de ne s'occuper que de celui du programme recherché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ps aux | grep 't[e]stram'
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!!!
Pour ça, il faut lancer le script en tâche de fond (en background). 2 possibilités: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)).J'ai relancé putty fait root ~ # top mais pas de testram toutes les 2 secondes...
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.Je mets toujours ça sous l’extension .sh ?
Si tu veux qu'il tourne en fond, voir mon post précédent.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...
Oui, grâce à l'instruction exit.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.Par contre, si tu killes le terminal, je ne sais pas s'il continue...
Salut,
Utilise screen qui permet de détacher les terminaux.Envoyé par maloy
Winnt
Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
Pensez au boutonsi votre problème est résolu.
C'est en Linuxant qu'on devient .... geek
Et c'est en LateXant qu'on devient flemmard
Mon blog tout neuf.
Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.
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.
Winnt
Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
Pensez au boutonsi votre problème est résolu.
C'est en Linuxant qu'on devient .... geek
Et c'est en LateXant qu'on devient flemmard
Mon blog tout neuf.
Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.
Partager