Professional Documents
Culture Documents
Les processus
Objectifs
Comprendre la notion de processus et de signaux Apprendre grer le multitche Administrer les processus de sa session Comprendre quelques notions avances du systme
Les rpertoires
/var/spool/at, /var/spool/cron /var/spool/cron/atjobs, /var/spool/cron/crontabs
Les chiers
/etc/cron.allow, /etc/cron.deny /var/adm/cron/cron.allow, /var/adm/cron/cron.deny /etc/at.allow, /etc/at.deny /var/adm/cron/at.allow, /var/adm/cron/at.deny /etc/inittab, /etc/inetd.conf
Le systme UNIX est multitche, cest--dire que chaque utilisateur peut excuter simultanment plusieurs logiciels. Ces tches, galement appeles processus, correspondent lensemble des logiciels actifs dans le systme. Apprendre les administrer, cest apprendre grer lactivit du serveur.
276 Utilisation
9. 1 Principe
Chaque nouvelle commande saisie par un utilisateur sexcute dans son environnement propre, hrit de celui du shell partir duquel elle a t lance. Cela sapplique toutes les commandes externes, mais pas aux builtins qui sexcutent dans lenvironnement du shell mme. Cette notion de logiciel autonome en cours dexcution est dsigne par le terme tche ou processus. Quand le logiciel est termin, le processus nexiste plus. Le systme UNIX identie chaque processus grce un numro unique, son PID (Process IDentication). Chaque processus possde un propritaire rfrenc par un UID : il sagit de lutilisateur qui a excut la commande, sauf dans le cas des commandes possdant un SUID-bit pour lequel le propritaire du processus est celui de la commande. Chaque processus a galement un processus pre, rfrenc par un numro PPID (Parent Process IDentication), qui est celui partir duquel il a t lanc, et dont il est le ls. son tour, chaque processus ls peut engendrer un autre processus dont il sera le pre. Lensemble des processus forment une hirarchie de processus pres et de processus ls.
init
2501
syslogd
2910
nfsd
1352
inetd
Systme
14214
popper
21238
telnetd
22107
telnetd
10323
imapd
Utilisateur
92123
bash
92504
ksh
Attention
Un signal peut avoir un numro diffrent selon le systme dexploitation. Ainsi, SIGTSTP porte le numro 20 sous Linux et le numro 18 sous AIX. Pour les signaux dont le numro est dpendant du systme, il faut privilgier lutilisation du nom du signal plutt que celle du numro dans les commandes qui le permettent.
278 Utilisation
Tableau 9.1 Liste des signaux Nom du signal SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGABRT SIGEMT SIGFPE SIGKILL SIGBUS SIGSEGV SIGSYS SIGPIPE SIGALRM SIGTERM SIGURG SIGSTOP SIGTSTP SIGCONT SIGCHLD SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 Numro(s) 1 2 3 4 5 6 7 8 9 10, 7 11 12 13 14 15 16, 23, 21 17, 19, 23 18, 20, 24 19, 18, 25 20, 17, 18 21, 26 22, 27 30, 10, 16 31, 12, 17 Interprtation Dconnexion du terminal. Interruption depuis le clavier (CTRL+C). Demande "Quitter" depuis le clavier (CTRL+\). Instruction illgale. Point darrt rencontr. Signal darrt depuis abort(). Instruction EMT. Erreur mathmatique en virgule ottante. Signal "KILL". Erreur de bus. Erreur mmoire (violation de segment mmoire). Appel systme avec de mauvais arguments. criture dans un tube, sans lecteur. Temporisation de lalarme coule. Signal de n. Condition urgente sur communication des sockets. Arrt du processus. Ne peut tre inhib ni ignor. Stop depuis le clavier (CTRL+Z). Continuer le processus si arrt. Ne peut tre inhib ni ignor. Processus ls termin ou arrt. Lecture du terminal en arrire-plan. criture du terminal en arrire-plan. Signal utilisateur numro 1. Signal utilisateur numro 2.
Les signaux permettent de contrler le droulement dun processus. On peut par exemple empcher de linterrompre en inhibant le signal dinterruption (SIGINT), ou en excutant une action particulire lors de la rception dun signal donn. Cest la commande trap, dj vue au chapitre 8, qui active ou dsactive le programme associ au signal. Si une action vide est associe, le signal na plus aucun effet, ce qui linhibe. Certains signaux comme SIGKILL ne peuvent tre inhibs, ce qui assure que lon pourra toujours tuer un processus. Voici quelques exemples de lutilisation de la commande trap sous Linux. La premire syntaxe afche la liste des signaux avec leur nom.
$ trap -l 1) SIGHUP 5) SIGTRAP ... 2) SIGINT 6) SIGABRT 3) SIGQUIT 7) SIGBUS 4) SIGILL 8) SIGFPE
La commande suivante associe la commande echo au signal SIGINT (numro 2), qui correspond la combinaison CTRL+C. Comme lassociation est permanente durant la session de travail, chaque utilisation de cette combinaison de touches afche le message argument de la commande echo. $ trap 'echo Interruption par CTRL+C' 2 $ ^C Interruption par CTRL+C La commande suivante associe la commande vide au signal SIGINT (numro 2), ce qui inhibe la combinaison de touches CTRL+C : $ trap '' 2 Le programme suivant montre leffet de la suppression du signal numro 2 (commande ci-dessus). Il utilise une boucle while innie qui afche des valeurs entires successives. Normalement, la combinaison CTRL+C devrait pouvoir arrter cette boucle mais cela ne fonctionne plus car le signal numro 2 est inhib. Le processus en cours nest plus interruptible par CTRL+C. Mais il peut toujours tre suspendu par le signal SIGTSTP mis par la combinaison CTRL+Z. $ i=0 $ while true > do > i=`expr $i + 1` > echo "--- $i ---" > sleep 4 > done --- 1 -- ^C--- 2 --# CTRL+C na plus deffet. --- 3 -- ^Z # frappe de CTRL+Z [1]+ Stopped sleep 2
280 Utilisation
La commande kill tue dnitivement le processus arrt. La syntaxe %1 correspond la numrotation du processus dans la liste des processus darrire-plan (voir paragraphe suivant), ce nest pas le PID du processus. $ kill %1 [1]+ Terminated
sleep 2
Enn, la dernire syntaxe ractive le signal 2 avec un comportement normal. Lassociation des touches CTRL+C est de nouveau possible. La commande compose est crite sur une seule ligne, les ; sparent les instructions lmentaires : $ trap 2 $ while true; do i=`expr $i + 1`; echo "--- $i ---"; sleep 4; done --- 4 -- --- 5 -- ^C # Arrt de la boucle. $
Attention
Dans le chapitre prcdent, nous avons voqu la variable denvironnement TMOUT. Il est important de rappeler quune commande en background nest pas considre comme une activit pour le terminal. Si la commande est plus longue que ce quautorise le time-out, la commande sera arrte avant son terme, au moment o le terminal sera stopp (arrt du processus associ).
Il est toujours possible de faire basculer une tche davant en arrire, et vice-versa, avec les commandes fg (pour foreground) et bg (pour background). Pour passer en arrire-plan une tche lance en avant-plan, il faut tout dabord la suspendre sans larrter, avec la combinaison CTRL+Z. Dans lexemple suivant, on excute une commande de recherche des chiers et des rpertoires orphelins (sans propritaires) dans toute la hirarchie. La commande est tout dabord lance en avant-plan, puis elle est suspendue au bout de quelques secondes : $ find / -nouser -print > /tmp/liste.nouser ^Z [1]+ Stopped find / -nouser -print >/tmp/liste.nouser La commande bg, reprend lexcution en arrire-plan : $ bg [1]+ find / -nouser -print >/tmp/liste.nouser & La commande jobs conrme que la commande continue son excution : $ jobs [1]+ Running
find / -nouser -print >/tmp/liste.nouser &
La commande fg passe la commande en avant-plan, ce qui rend nouveau la saisie impossible. La commande est arrte avec CTRL+C. $ fg find / -nouser -print >/tmp/liste.nouser ^C $
noter
Les commandes fg et bg peuvent tre saisies avec, en argument, le numro du processus grer. Cela se justie dans le cas o plusieurs processus se trouvent en arrireplan. La syntaxe devient alors : $ fg %2 $ bg %2 si le numro 2 correspond la numrotation fournie par la commande jobs du processus administrer.
282 Utilisation
Les combinaisons de touches CTRL+C et CTRL+Z sont associes aux signaux SIGINT et SIGTSTP. La commande stty, avec loption -a, afche les signaux de contrle des processus, associs des combinaisons de touches, comme intr et susp : $ stty -a speed 9600 baud; 50 rows; 136 columns; eucw 1:1:0:0, scrw 1:1:0:0: intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^@ eol2 = ^@; start = ^Q; stop = ^S; susp = ^Z; dsusp = ^Y; reprint = ^R ... La commande de recherche aurait pu tre excute directement en arrire-plan avec la syntaxe : $ find / -nouser -print > /tmp/liste.nouser &
priorit. Une valeur positive indique un accs moindre aux ressources du processeur.
S : tat du processus. La lettre S indique que le processus dort (Sleeping), R ou A prcise quil est en excution (Running sous Linux ou Active sous AIX), W indique quil est en mmoire de swap (Swapped). Les autres symboles diffrent selon les systmes.
-f Afche des informations un peu moins compltes que loption -l, mais plus lisibles. LUID fait apparatre le nom de login la place du numro, la colonne CMD indique la syntaxe complte de la commande avec le prxe - pour les login shell, et elle afche une colonne supplmentaire :
STIME : heure de dbut du processus. -a -e
Afche les processus des autres utilisateurs. Afche la liste de tous les processus, sauf ceux du noyau.
-u Afche les informations sur lutilisateur dont le nom est spci. Une liste de noms peut tre fournie. $ ps -u martin,dupont
284 Utilisation
-t Afche les informations sur les processus associs un terminal. Une liste de noms peut tre fournie. $ ps -t console,pts/1 -o Permet de slectionner le format dafchage dans lordre voulu selon une liste de mots cls prdnis, qui peuvent varier dun systme lautre, mais dont les principaux sont :
user : nom de lutilisateur. group : nom du groupe de processus (gnralement le groupe de lutilisateur). uid : numro de lutilisateur. gid : numro du groupe de processus. Pid : numro du processus. ppid : numro du processus pre. command : nom de la commande. tty : nom de la ligne du terminal. nice : valeur gre par la commande nice. Time : temps cumul du processus.
Les lignes de commandes suivantes montrent le rsultat de ces options. La premire commande afche la liste de processus de lutilisateur connect, martin, dont lUID est 524, avec des informations abondantes pour chaque processus : [martin@abricot F S UID PID 4 S 524 8465 0 R 524 8513
martin]$ ps -l PPID C PRI NI ADDR SZ WCHAN 8464 0 73 0 663 wait4 8465 0 77 0 915 TTY pts/1 pts/1 TIME CMD 00:00:00 bash 00:00:00 ps
Lutilisation de loption -f donne des informations plus lisibles. Le nom de lutilisateur apparat et la syntaxe -bash prcise quil sagit dun shell de connexion : [martin@abricot UID PID martin 8465 martin 8514
martin]$ ps -f PPID C STIME TTY 8464 0 13:35 pts/1 8465 0 13:37 pts/1 TIME CMD 00:00:00 -bash 00:00:00 ps -f
Loption -e afche tous les processus. Si lafchage est ltr par la commande grep avec largument martin, seuls les processus de martin apparaissent. Lafchage montre que cet utilisateur est connect deux fois : la premire connexion est une session bash, la seconde est une connexion ftp travers le dmon proftpd. [martin@abricot martin]$ ps -ef|grep martin root 8464 8463 0 13:35 ? 00:00:00 login -- martin martin 8465 8464 0 13:35 pts/1 00:00:00 -bash martin 8511 2002 0 13:36 ? 00:00:00 proftpd: martin - cisco ppp15.crip.univ6.fr: IDLE
martin martin
8515 8516
8465 8465
Loption -u afche tous les processus de martin et conrme la double connexion : [martin@abricot martin]$ ps -u martin PID TTY TIME CMD 8465 pts/1 00:00:00 bash 8511 ? 00:00:00 proftpd 8517 pts/1 00:00:00 ps Avec les informations fournies par loption -f de la commande ps, il est possible de remonter la hirarchie des processus du login shell de martin jusquau processus initial, init. Pour cela, il faut commencer par le processus pre du login shell : [martin@abricot UID PID martin 8465 martin 8563
martin]$ ps -f PPID C STIME TTY 8464 0 13:35 pts/1 8465 0 13:40 pts/1 TIME CMD 00:00:00 -bash 00:00:00 ps f
Le pre du processus bash (8465) de martin est le numro 8464. Il faut ensuite trouver ce numro parmi tous les processus du systme : [martin@abricot root 8464 martin 8465 martin 8565
martin]$ ps -ef|grep 8464 8463 0 13:35 ? 00:00:00 login -- martin 8464 0 13:35 pts/1 00:00:00 -bash 8465 0 13:40 pts/1 00:00:00 grep 8464
Cest le processus login, dont le PID est 8464 et qui possde comme pre le processus 8463. La recherche du nom du processus pre suit le mme raisonnement. [martin@abricot martin]$ ps -ef|grep 8463 root 8463 1533 0 13:35 ? 00:00:00 telnetd -a none root 8464 8463 0 13:35 ? 00:00:00 login -- martin martin 8567 8465 0 13:41 pts/1 00:00:00 grep 8463 Cest le processus telnetd, dont le PID est 8463 et qui possde comme pre le processus 1533. La dernire recherche montre que ce numro correspond xinetd, dont le pre est init (processus numro 1). [martin@abricot martin]$ ps -ef |grep 1533 root 1533 1 0 Mar01 ? 00:00:00 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid ... En rsum, lenchanement des processus pres et ls qui a abouti la connexion de martin est le suivant : init (1) xinetd (1533) telnetd (8463) login (8464) bash (8465).
286 Utilisation
Enn, lutilisateur peut dnir lui-mme le format dafchage de la commande ps avec loption -o. En voici un exemple : $ ps -o user,group,uid,gid,pid,ppid,command USER GROUP UID GID PID PPID COMMAND martin 600 524 600 8465 8464 -bash martin 600 524 600 8952 8465 ps -o user,group,uid,gid,pid,ppid,command
0 Le signal est envoy tous les processus qui appartiennent au mme groupe de processus que celui de lmetteur. La commande ci-aprs tue tous les processus de la session actuelle et dconnecte lutilisateur qui la saisit : $ kill -kill 0 -1 Le signal est envoy tous les processus dont le propritaire est le mme que le processus metteur (ne pas confondre avec le processus 1, init). La commande qui suit tue tous les processus appartenant lutilisateur qui saisit cette commande. Toutes ses sessions sont termines. $ kill -kill 1 %n Le signal est envoy au nime processus de la liste afche par la commande jobs : $ jobs [1]- Stopped [2]+ Stopped $ kill %2 [2]+ Terminated
sleep 5 sleep 10 sleep 10
Les diffrentes valeurs de largument signal sont : n Indique un numro de signal prdni. $ kill -9 2285 nom Indique le libell du signal. Ce nom peut avoir la forme SIGKILL, SIGTERM, etc., ou encore kill, term, etc. Attention, certains systmes nacceptent pas les deux formes. $ kill kill 8465 $ kill SIGKILL 8465
# pour Linux
0 Le signal nest pas envoy. La commande vrie seulement lexistence du processus. $ kill -0 2222 -bash: kill: (2222) - No such process Voici un exemple dutilisation de la commande kill. Deux tches darrire-plan sont lances : une boucle while et une commande find. Dans les deux cas, lafchage est redirig vers /dev/null (la poubelle !), de faon ne conserver lcran que le rsultat des saisies. La premire commande compose (while) est excute en arrire-plan : [martin@abricot martin]$ while true > do > echo "essai">/dev/null > done & [1] 18044
288 Utilisation
La seconde commande (find) est ensuite lance : [martin@abricot martin]$ find / -print 2>/dev/null 1>/dev/null & [2] 18045 La commande ps afche la liste de tous les processus. Le second -bash correspond la boucle while ; il possde le mme pre (18004) que la commande find. Ce pre est le shell de login. [martin@abricot martin]$ ps -f UID PID PPID C STIME TTY martin 18004 18003 0 07:07 pts/1 martin 18044 18004 99 07:08 pts/1 martin 18045 18004 8 07:08 pts/1 martin 18046 18004 0 07:08 pts/1
TIME 00:00:00 00:00:18 00:00:00 00:00:00 CMD -bash -bash find / -print ps -f
Les deux processus lancs en tche de fond sont arrts avec la commande kill : [martin@abricot martin]$ kill -kill 18045 18044 [1]- Killed while true; do echo "essai" >/dev/null; done [2]+ Killed find / -print 2>/dev/null >/dev/null
noter
Il existe une commande, xkill, taper au niveau du prompt, qui permet darrter lexcution dun programme graphique juste en cliquant sur la fentre de ce logiciel, sans avoir besoin de rcuprer le numro de processus. Cette commande propose, la place du curseur de la souris, une petite cible placer sur la fentre graphique du logiciel que lon veut stopper. Il suft ensuite de cliquer avec le bouton gauche de la souris.
Attention
La commande fuser nest pas range dans le mme rpertoire selon le systme UNIX. Elle se trouve dans /sbin sous Linux, et dans /etc sous AIX. Laccs la commande peut chouer si la variable PATH ne contient pas ces deux rpertoires. Pour rsoudre le problme ventuel, il suft de taper : PATH=$PATH:/sbin:/etc
Un sufxe apparat la suite du numro du processus. Il indique le type daccs du processus et peut prendre les valeurs suivantes : c Accs au rpertoire courant. e Accs un programme en cours d'excution. r Accs au rpertoire racine. m ou s Accs un chier en mmoire ou une bibliothque partage. Voici un exemple qui illustre lemploi de cette commande sur un systme AIX. Ladministrateur root veut librer le rpertoire /home/durand de tous les processus qui y sont attachs. La premire commande afche les processus : admin(root) $ fuser /home/durand /home/durand: 602332c 1110140c 1736922c Dans cet exemple, tous les processus sont ceux de durand, qui est connect : admin(root) $ ps -aef|grep durand durand 602332 1581078 0 17:57:56 pts/0 0:01 -ksh durand 1110140 1822840 0 18:02:03 pts/1 0:01 -ksh durand 1736922 135278 0 17:54:48 - 0:00 ftpd -l root 1847490 1138898 0 18:07:23 pts/2 0:00 grep durand La commande fuser avec loption -k arrte tous les processus : admin(root) $ fuser -k /home/durand /home/durand: 602332c 1110140c 1736922c
290 Utilisation
o : commande est la ligne de commandes excuter. Cest la syntaxe complte avec tous ses arguments. incrment est lajustement de la valeur de gentillesse. Si incrment nest pas prcis, il est de 10 ; la valeur de gentillesse est augmente dautant et la priorit du processus est plus faible. Si lajustement est ngatif (rserv root), la gentillesse dcrot et la priorit augmente. Voici un exemple dexcution de la commande nice sous Linux. Elle excute un script shell de recherche des chiers orphelins . Celui-ci sappuie sur la commande find, qui parcourt le rpertoire dont le nom est fourni au script par la ligne de commandes. [martin@abricot martin]$ cat recherche_nouser find $1 -nouser -print 2>/dev/null 1>/tmp/trace.nouser La commande nice excute le script avec largument /tmp, et un incrment de 15. La commande est excute en arrire-plan. [martin@abricot martin]$ nice -n 15 ./recherche_nouser /tmp & [1] 18305 La commande ps -l fait apparatre la valeur de gentillesse 15 pour la commande find et le script shell (sh). La priorit de ces deux commandes est plus faible que les autres qui ont une valeur de gentilles (colonne NI) de 0 (valeur par dfaut sous Linux). [martin@abricot F S UID PID 4 S 524 18103 0 S 524 18305 0 R 524 18306 0 R 524 18307
martin]$ ps -l PPID C PRI NI 18102 0 75 0 18103 0 77 15 18305 78 78 15 18103 0 74 0 ADDR SZ 666 611 493 915 WCHAN wait4 wait4 TTY pts/1 pts/1 pts/1 pts/1 TIME 00:00:00 00:00:00 00:00:02 00:00:00 CMD bash sh find ps
La commande renice complte la commande prcdente. Elle change la valeur de gentillesse dun processus actif. Voici les syntaxes de cette commande : $ renice -n incrment -p ID $ renice -n incrment -g ID $ renice -n incrment -u ID La syntaxe Linux nutilise pas doption -n. Lincrment est directement crit. Largument incrment correspond lajustement de la valeur de gentillesse ; -p, -g, -u sont les options : -p Prcise que le numro ID suivant est celui du ou des processus. Les exemples suivants diminuent la priorit des processus 18306 et 15336 : $ renice -n 6 -p 18306 15336 $ renice 6 -p 18306 15336
# pour AIX # pour Linux
-g Indique que le numro ID suivant est celui du ou des groupes de processus. Les exemples suivants augmentent la priorit des processus dont les groupes sont 508 et 645 pour AIX, et personnel pour Linux. Laugmentation de la priorit est rserve root. $ renice -n -14 -g 508 645 $ renice -14 -g personnel
# pour AIX # pour Linux
-u Indique que le numro ID suivant est celui du ou des utilisateurs. Les exemples suivants diminuent la priorit des processus appartenant dupont et martin (excuts par root). $ renice -n 4 -u dupont martin # pour AIX $ renice 4 -u dupont martin # pour Linux
292 Utilisation
Aprs dconnexion, lutilisateur martin se connecte nouveau. Le processus lanc avec nohup est toujours actif, il nest rattach aucun terminal (colonne TTY ?), et le processus pre est init. [martin@abricot martin]$ ps -f -u martin | grep find martin 19114 1 7 02:58 ? 00:00:03 find / -print Pour conserver lafchage dans un chier dont le nom est liste_fichiers, il faut rcrire la commande prcdente avec la syntaxe suivante : $ nohup find / -print >liste_fichiers &
9.6.2 La commande at
Contrairement nohup, qui commence lexcution pendant la session ouverte, la commande at planie lexcution dune commande, en diffr. Le traitement dbutera lheure et la date indiques par lutilisateur.
Fichiers de conguration Laccs cette commande est contrl par deux chiers :
/var/adm/cron/at.allow (AIX) ou /etc/at.allow (Linux) : ce chier contient la liste des noms des utilisateurs autoriss se servir de la commande at. Si ce chier (de mme que at.deny) nexiste pas, seul lutilisateur root peut lutiliser. /var/adm/cron/at.deny (AIX) ou /etc/at.deny (Linux) : ce chier contient la liste des noms des utilisateurs qui ne sont pas autoriss se servir de la commande at. Voici un exemple de ces deux chiers sur un systme AIX. Le premier contient une liste, le second est vide : admin(root) $ cat /var/adm/cron/at.allow root dupont admin(root) $ cat /var/adm/cron/at.deny admin(root) $ Les tches qui sont lances en diffr sont ranges dans un rpertoire dattente, /var/spool/cron/atjobs (AIX) ou /var/spool/at (Linux).
Mise en uvre La syntaxe de cette commande est variable selon les systmes, et nous ne pouvons prsenter ici toutes les syntaxes. De grandes constantes sont cependant respectes, comme la possibilit de prciser la date et lheure dun jour particulier, ou bien de dnir un dlai partir du moment o la commande at est saisie. Le format de la date peut tre de la forme AAMMJJhhmm, ou encore hh :mm JJ/MM/AA, o AA indique lanne, MM le mois, JJ le jour, hh lheure et mm les minutes, selon les systmes. Voici
deux exemples indiquant la date du 10 mars 2004 22h. La premire syntaxe est propre AIX (avec loption -t), la seconde Linux : $ at -t 0403102200 $ at 22:00 10/03/04 La commande at lance une suite de commandes qui sont saisies de manire interactive. La n de la saisie doit tre indique par CTRL+D. Les commandes dafchage des travaux en cours sont atq pour Linux et at -l pour AIX. Les commandes de suppression des travaux sont atrm pour Linux et at -r pour AIX. Voici des exemples de mises en uvre de cette commande sous Linux et AIX. La premire syntaxe prpare une excution pour le 10 mars 2004 22h. La syntaxe est celle du systme AIX. On termine la saisie avec la combinaison de touches CTRL+D. /home/durand $ at -t 0403102200 find /tmp nouser print 2>/dev/null ^D Job durand.1078952400.a will be run at Wed Mar 10 22:00:00 NFT 2004 La commande at -l conrme la prise en compte du traitement diffr : /home/durand $ at -l durand.1078952400.a
Wed Mar 10 22:00:00 NFT 2004
Lutilisateur root peut consulter directement le rpertoire atjobs : (root) $ ls -l /var/spool/cron/atjobs total 8 -r-Sr-Sr-- 1 durant crip 2163 Mar 09 13:05 durand.1078952400.a La commande at traitement :
-r, saisie par lutilisateur durand, permet de supprimer ce
/home/durand $ at -r durand.1078952400.a The durand.1078952400.a at file is deleted. Voici la mme manipulation sous Linux. Le format de date change, et les commandes dafchage et de suppression aussi : [martin@abricot martin]$ at 22:00 10/03/04 warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> find /tmp -nouser -print 2>/dev/null at> ^D <EOT> job 4 at 2004-10-03 22:00 martin afche la liste des traitements diffrs : [martin@abricot martin]$ atq 4 2004-10-03 22:00 a martin
294 Utilisation
Lutilisateur root peut consulter directement le rpertoire /var/spool/at : [root@abricot root]# ls -l /var/spool/at total 8 -rwx-----1 martin personnel 2040 mar 9 04:28 a00005011265d0* martin supprime son traitement diffr : [martin@abricot martin]$ atrm 4 On peut galement indiquer la date en utilisant des noms pour les mois. La commande suivante prpare un traitement pour le 11 avril de lanne en cours, 20h : $ at 20:00 Apr 11 Elle peut aussi ne contenir que lheure de la journe en cours : $ at 22:00 Enn, voici un exemple de prparation dun traitement o un dlai remplace la date. Le traitement sexcutera dans deux jours partir de maintenant . Ici, la suite de commandes est remplace par un script shell. $ at now + 2 days /home/durand/bin/compil_prog ^D Job durand.1079003750.a will be run at Thu Mar 11 12:15:50 NFT 2004. /home/durand $ at -l durand.1079003750.a Thu Mar 11 12:15:50 NFT 2004
noter
Vous pouvez aussi lancer un programme en lindiquant en argument de la commande at aprs la date : at 22:00 /home/durand/bin/compil_prog
Fichiers de conguration Cette commande fonctionne sur le mme modle que at, avec deux chiers, cron.allow et cron.deny : le premier contient la liste des utilisateurs autoriss, lautre
la liste de ceux pour qui la commande est interdite. Le chemin daccs ces chiers change selon le systme UNIX : /var/adm/cron/cron.allow et /var/adm/cron/cron.deny pour AIX. /etc/cron.allow et /etc/cron.deny pour Linux. Le rpertoire contenant les chiers de planication est /var/spool/cron/crontabs (AIX) ou /var/spool/cron (Linux).
0,30
8-20
/home/cripsyst/bin/check_activity
Minutes de 0 59
Commande
296 Utilisation
Voici un exemple dafchage du chier crontab de root sur un systme AIX : admin(root) $ crontab -l # -- Nettoyage de /tmp tous les jours a 3h du matin DUPONT 10/3/00 - 0 3 * * * /usr/sbin/skulker # -- Surveillance des FileSystems toutes les heures a 45 minutes- 45 * * * * /home/cripsyst/bin/check_filesystems # -- Verification des quotas a 10h30 et 17h30 JM MARTIN 2/2/04- 30 10,17 * * * /usr/ucb/quotacheck -a # -- Trace l activite du serveur toutes les 10 minutes de 8h a 20h - 0,30 8-20 * * 0 /home/cripsyst/bin/check_activity Il est possible de mettre en place un crontab en indiquant en argument de la commande un nom de chier. Ce chier texte doit contenir des lignes au format indiqu ci-dessus. La syntaxe suivante montre la cration dun crontab travers un chier texte dont le nom est planication , et qui contient des lignes au format prsent. Il faut saisir la commande : $ crontab planification Sous Linux, il est possible dditer directement le chier actif. Pour cela il suft de saisir : $ crontab -e
noter
Le chier de planication de root est trs important car cest lui qui rgule lactivit nocturne , les statistiques dutilisation, et souvent les auto-tests de scurit du serveur. Il faut donc prendre lhabitude dajouter des commentaires clairs et dindiquer la date de modication, mais aussi lauteur si le compte dadministration est gr par plusieurs personnes. Avant toute modication, il faut conserver un tat de ce chier la date du jour en saisissant, par exemple : $ crontab -l > crontab.root.20040309
Par prcaution, il est prfrable de modier la planication des tches en procdant par tape : 1. 2. 3. Conservation de la planication dans un chier sur disque. Modication de cette copie. Mise jour des changements.
Voici cette manipulation sous Linux. La premire commande afche ltat de la planication pour lutilisateur martin : [martin@abricot martin]$ crontab -l 40 * * * * /home/martin/compil_projet
Lutilisateur martin sauvegarde puis dite le chier : [martin@abricot martin]$ crontab -l > crontab.martin [martin@abricot martin]$ vi crontab.martin Le chier modi est install : [martin@abricot martin]$ crontab crontab.martin martin vrie que la modication (la valeur est passe de 40 30) est active : [martin@abricot martin]$ crontab -l 30 * * * * /home/martin/compil_projet
Astuce
Il est possible, grce la commande at, dobtenir un comportement identique au cron (rptitif ). Pour cela, il suft de rappeler la mme commande at la n de son excution. Quand at est termin, il peut par exemple recrer un at identique pour le lendemain. Ce systme vous donne la possibilit dautomatiser des tches rptitives mme si vous navez pas accs la commande crontab.
9. 7 Les dmons
Les dmons, ou daemons, sont des processus particuliers qui sont toujours actifs. Leur nom comprend souvent (mais pas toujours) le sufxe d , pour daemon . Ainsi, le dmon cron qui dclenche les actions indiques par la commande crontab se nomme crond sous Linux et cron sous AIX. Le rle des dmons est de grer les services proposs par le serveur, quil sagisse de dmons systme, comme la planication des tches (cron), ou rseau, comme telnetd. Ils doivent toujours tre actifs, car leur arrt implique larrt du service. Les dmons rseau sont surveiller car ils constituent des portes daccs au serveur, et sils ont des failles de scurit, la machine peut tre lobjet de piratages. Ladministrateur doit donc veiller activer uniquement les services quil veut offrir aux utilisateurs. Lactivation des dmons peut se faire de deux manires : au dmarrage de lordinateur ou la demande. Lorsque le dmon est activ au dmarrage du serveur, son lancement est effectu par un chier systme interprt pendant cette phase. Cest le cas du dmon cron, qui est activ par le chier /etc/inittab sous AIX. Les autres chiers de dmarrage du systme AIX sont /etc/rc, /etc/rc.tcpip et /etc/rc.nfs : ils activent par exemple le dmon nfsd pour la gestion des systmes de chiers rseau. (root) $ cat /etc/inittab init:2:initdefault: brc::sysinit:/sbin/rc.boot 3 >/dev/console 2>&1 # Phase 3 of system boot rc:23456789:wait:/etc/rc 2>&1 | alog -tboot > /dev/console # Multi-User
298 Utilisation
srcmstr:23456789:respawn:/usr/sbin/srcmstr # System Resource Controller rctcpip:23456789:wait:/etc/rc.tcpip > /dev/console 2>&1 # TCP/IP daemons rcnfs:23456789:wait:/etc/rc.nfs > /dev/console 2>&1 # NFS Daemons cron:23456789:respawn:/usr/sbin/cron ... Linux possde une hirarchie de chiers de dmarrage qui se trouvent dans le rpertoire /etc/rc.d. Le chier principal dinitialisation du systme est /etc/rc.d/rc.sysinit. [martin@abricot total 80 drwxr-xr-x 2 -rwxr-xr-x 1 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 2 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1
martin]$ ls -l /etc/rc.d root root root root root root root root root root root root root root root root root root root root root root root root 4096 3526 4096 4096 4096 4096 4096 4096 4096 1636 601 32837 jan sep jan jan jan jan jan jan jan sep sep sep 16 24 27 27 27 27 27 27 27 24 24 24 08:44 16:30 04:19 04:19 04:19 04:19 04:19 04:19 04:19 16:30 16:30 16:30 init.d/ rc* rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local* rc.modules* rc.sysinit*
Lorsque le dmon est activ la demande, il est pris en charge par le superdmon , inetd. Celui-ci gre les dmons rseau qui doivent rpondre chaque sollicitation dun client. Par exemple, chaque accs au serveur par un client telnet implique lexcution dun nouveau dmon telnetd par inetd . Le super-dmon est congur par le chier /etc/inetd.conf, dont voici un exemple sous AIX : (root) $ cat /etc/inetd.conf # service socket protocol wait/ user server server program # name type nowait program arguments # -- Demons pour les clients telnet et ftp -- ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a # -- Demons pour l acces au courrier -- imap2 stream tcp nowait root /usr/sbin/imapd imapd pop3 stream tcp nowait root /usr/sbin/pop3d pop3d Les dmons sont des processus que lon peut administrer comme les autres avec la commande kill. Pour arrter le dmon cron sous AIX, il faut saisir (en tant que root) : (root) $ ps -ef|grep cron root 295022 1 0 Feb 29 (root) $ kill 9 295022 Pour relancer le dmon, il suft de taper : (root) $ /usr/sbin/cron
# AIX # AIX 0:08 /usr/sbin/cron # AIX
Cependant, la plupart des systmes proposent des mthodes moins violentes que la commande kill. AIX dispose de deux commandes, stopsrc et startsrc : (root) $ stopsrc s nfsd (root) $ startsrc s nfsd
# AIX : Arret de nfs # AIX :Demarrage de nfs
Linux propose des scripts de dmarrage et darrt. Cest le cas par exemple du montage dynamique des disques rseau gr par le dmon /usr/sbin/automount. Pour dmarrer le dmon, il suft dappeler le script, avec start en argument. Pour le stopper, il faut utiliser largument stop. admin(root) $ /etc/rc.d/init.d/autofs stop # Linux : Arret automount admin(root) $ /etc/rc.d/init.d/autofs start # Linux : Demarrage # automount
Rsum
Les processus correspondent aux logiciels actifs. Chaque processus est autonome, il possde un processus pre et peut lui-mme engendrer un processus ls. Lactivit du serveur est reprsente par une hirarchie de processus pres et de processus ls dont le premier est init. Chaque processus possde un numro unique, son PID (Process IDentication). Cest travers ce numro quil est administr. Il connat le numro de son pre, quil rfrencie par son PPID (Parent Process IDentication). Les processus communiquent entre eux grce aux signaux quils mettent et reoivent. Chaque signal correspond un vnement non prvu dans le traitement normal du logiciel. Des actions sont prdnies selon le numro du signal, le plus connu tant le numro 9, qui arrte ( tue ) le processus. On peut gnrer les signaux en appuyant sur des touches de contrle. Dans ce cas, le logiciel en cours dexcution reoit le signal attribu la combinaison de touches en question. Par exemple, les combinaisons CTRL+C et CTRL+Z mettent les signaux SIGINT (numro 2) et SIGTSTP (numro 18 ou 20 selon les systmes), ce qui arrte ou suspend lexcution. Cette mthode de gestion interactive ne peut sappliquer quaux processus davant-plan, non ceux darrire-plan. La mthode la plus courante, et qui sapplique tous les types de processus (avantplan et arrire-plan), utilise des commandes explicites, comme ps ou kill, qui afchent la liste des processus et envoient des signaux aux processus dont le PID est spci. Dautres commandes complmentaires, comme fuser, nice ou renice, permettent dafner la gestion en tuant des groupes de processus ou en changeant leur priorit. Il existe une autre catgorie de processus qui ne sont pas rattachs une connexion. Ces traitements diffrs sexcutent quand lutilisateur nest plus connect. Les commandes nohup, at et crontab permettent de prparer ces traitements : nohup lance
300 Utilisation
une tche en vitant quelle ne soit tue la dconnexion, at prpare une excution diffre et crontab planie des tches diffres rptitives. Enn, il existe certains processus trs particuliers : les dmons. Ils sont actifs en permanence et rendent des services internes (planication des tches, par exemple) ou externes (comme les services rseau). Ils sont lancs soit au dmarrage du systme par des chiers spciques (/etc/inittab, /etc/rc, etc.), soit la demande, quand ils sont pris en charge par le super-dmon , inetd.
Questions et exercices
Questions de rvision
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Quest-ce que le PID et le PPID dun processus ? Quel est le rle des signaux ? Quel est le nom du signal qui arrte un processus interactif ? Quelle combinaison de touches lui est attribue ? Comment faire pour excuter une commande en arrire-plan ? Quelle est la diffrence entre la commande ps -f et la commande ps -ef ? Quelle commande permet de tuer un processus particulier, et quelle commande permet de tuer les processus attachs un rpertoire? Une valeur positive pour la commande nice augmente-t-elle la priorit du processus ? Quelle est la diffrence entre la commande nohup et la commande at ? Quelle est la commande qui permet de planier des traitements diffrs ? Quel est le nom du dmon qui gre le dclenchement de ces traitements ? Comment se nomment les deux chiers qui donnent accs la commande at ?
Exercices
1. 2. 3. 4. 5. 6. 7. Afchez la liste des signaux connus. Dsactivez la possibilit dinterrompre une excution avec CTRL+C. Ractivez la frappe de CTRL+C. En langage de commandes, crez une boucle qui afche le texte en boucle toutes les deux secondes. Suspendez lactivit de ce processus par une combinaison de touches puis passez-le en arrire-plan. Tuez ce processus darrire-plan. Saisissez la commande qui parcourt toute votre hirarchie et conserve le nom de tous les objets trouvs dans un chier trace. Cette commande sera excute en arrire-plan. Tapez la commande qui conrme que le processus dont le PID est 2345 nexiste pas. Afchez la liste de tous les processus de lutilisateur martin. Afchez la liste de vos processus avec leur niveau de priorit. Afchez les informations sur le pre de votre login shell. Afchez la liste de vos processus avec les informations suivantes : lUID, le PID, le PPID et la commande, dans cet ordre. En une seule commande, tuez tous les processus de votre session. En une seule commande, tuez tous les processus de toutes vos sessions. Vous tes ladministrateur root ; tuez tous les processus attachs au rpertoire
/home/martin.
Modiez la syntaxe de la rponse la question 7 pour que la commande se poursuive quand vous vous dconnectez. Excutez votre script shell de compilation my_compil en arrire-plan, avec un niveau de priorit plus faible de 10 (incrments) que celui de la priorit normale. Vous tes en bash. Donnez la syntaxe de la ligne du chier mis en place par la commande crontab, qui excute la commande /usr/local/bin/check_fs tous les samedis 2h45 du matin. Afchez la liste de vos tches planies (crontab). Vriez si le dmon nfsd est actif.
18.
19. 20.