Ansible - Comment Grep (ps -few) et tuer n'importe quel processus Linux en cours d'exécution sur l'hôte distant ?
Publié: 2022-02-24Ansible est un outil d'administration système assez étonnant. Nous avons publié un certain nombre d'articles sur Ansible au cours des dernières semaines sur la façon de copier des fichiers sur un hôte distant, comment exécuter des commandes sur des hôtes distants, comment installer Java, Python sur un hôte distant, etc.
Dans ce didacticiel, nous verrons comment grep processus java s'exécutant sur un hôte distant et tuer ce processus distant à l'aide d'un simple playbook ansible.
Voici les étapes que nous allons suivre dans ce tutoriel :
- Sur l'hôte distant, exécutez CrunchifyAlwaysRunningProgram.java
- Suivez le didacticiel sur la façon d'exécuter un programme pour toujours en Java
- exécuter le programme java en utilisant
nohup java CrunchifyAlwaysRunningProgram &
1 2 3 |
ubuntu @ ip - 172 - 31 - 10 - 150 : ~ $ nohup java CrunchifyAlwaysRunningProgram & [ 1 ] 18174 ubuntu @ ip - 172 - 31 - 10 - 150 : ~ $ nohup : ignoring input and appending output to 'nohup.out' |
Comment vérifier si le processus est démarré et en cours d'exécution sur l'hôte distant ?
consultez l' ID 18174
.
1 2 3 |
ubuntu @ ip - 172 - 31 - 10 - 150 : ~ $ ps - few | grep CrunchifyAlwaysRunningProgram ubuntu 18174 15069 1 15 : 15 pts / 0 00 : 00 : 00 java CrunchifyAlwaysRunningProgram ubuntu 18187 15069 0 15 : 16 pts / 0 00 : 00 : 00 grep -- color = auto CrunchifyAlwaysRunningProgram |
- créer un fichier fichier
crunchify-hosts
qui a l'adresse IP de l'hôte distant - créer le fichier
crunchify-grep-kill-process.yml
avec des tâches ansibles pour le processus grep et kill java - exécuter la commande : ansible-playbook -i ./crunchify-hosts crunchify-grep-kill-process.yml
- vérifier le résultat sur la console du terminal macOS
fichier crunchify-hosts
1 2 3 4 5 6 7 8 9 10 |
[ local ] localhost ansible_connection = local ansible_python_interpreter = python [ crunchify ] 3.16.83.84 [ crunchify : vars ] ansible_ssh_user = ubuntu ansible_ssh_private_key_file =/ Users / crunchify / Documents / ansible / crunchify . pem ansible_python_interpreter =/ usr / bin / python3 |
Le fichier contient l'adresse IP distante et les informations d'identification qui aideront à se connecter sans mot de passe.
fichier crunchify-grep-kill-process.yml
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 |
--- - hosts : crunchify become : yes tasks : - name : Get running processes list from remote host ignore_errors : yes shell : "ps -few | grep CrunchifyAlwaysRunningProgram | awk '{print $2}'" register : running_processes - name : Kill running processes ignore_errors : yes shell : "kill {{ item }}" with_items : "{{ running_processes.stdout_lines }}" - wait_for : path : "/proc/{{ item }}/status" state : absent with_items : "{{ running_processes.stdout_lines }}" ignore_errors : yes register : crunchify_processes - name : Force kill stuck processes ignore_errors : yes shell : "kill -9 {{ item }}" with_items : "{{ crunchify_processes.results | select('failed') | map(attribute='item') | list }}" |
Ici, le fichier de playbook ansible obtient tous les processus Java, en le tuant à l'aide de la simple commande kill -9
.

Exécutez Ansible Playbook :
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 |
bash1 . 2 $ ansible - playbook - i . / crunchify - hosts crunchify - grep - kill - process . yml PLAY [ crunchify ] ************************************************************************************************************************************************************** TASK [ Gathering Facts ] ******************************************************************************************************************************************************** ok : [ 3.16.83.84 ] TASK [ Get running processes list from remote host ] **************************************************************************************************************************** changed : [ 3.16.83.84 ] TASK [ Kill running processes ] ************************************************************************************************************************************************* changed : [ 3.16.83.84 ] = > ( item = 18174 ) failed : [ 3.16.83.84 ] ( item = 18342 ) = > { "changed" : true , "cmd" : "kill 18342" , "delta" : "0:00:00.002602" , "end" : "2019-05-10 15:20:36.957062" , "item" : "18342" , "msg" : "non-zero return code" , "rc" : 1 , "start" : "2019-05-10 15:20:36.954460" , "stderr" : "/bin/sh: 1: kill: No such process" , "stderr_lines" : [ "/bin/sh: 1: kill: No such process" ] , "stdout" : "" , "stdout_lines" : [ ] } failed : [ 3.16.83.84 ] ( item = 18344 ) = > { "changed" : true , "cmd" : "kill 18344" , "delta" : "0:00:00.002648" , "end" : "2019-05-10 15:20:38.479354" , "item" : "18344" , "msg" : "non-zero return code" , "rc" : 1 , "start" : "2019-05-10 15:20:38.476706" , "stderr" : "/bin/sh: 1: kill: No such process" , "stderr_lines" : [ "/bin/sh: 1: kill: No such process" ] , "stdout" : "" , "stdout_lines" : [ ] } . . . ignoring TASK [ wait_for ] *************************************************************************************************************************************************************** ok : [ 3.16.83.84 ] = > ( item = 18174 ) ok : [ 3.16.83.84 ] = > ( item = 18342 ) ok : [ 3.16.83.84 ] = > ( item = 18344 ) TASK [ Force kill stuck processes ] ********************************************************************************************************************************************* PLAY RECAP * ******************************************************************************************************************************************************************* 3.16.83.84 : ok = 4 changed = 2 unreachable = 0 failed = 0 |
Comment vérifier ?
Essayez simplement de relancer le processus grep sur l'hôte distant.
1 2 |
ubuntu @ ip - 172 - 31 - 10 - 150 : ~ $ ps - few | grep CrunchifyAlwaysRunningProgram ubuntu 18484 15069 0 15 : 22 pts / 0 00 : 00 : 00 grep -- color = auto CrunchifyAlwaysRunningProgram |
Comme vous le remarquez, vous ne verrez pas process ID 18174
dans la liste et aucun processus Java n'est en cours d'exécution.
C'est ça.
C'est le moyen le plus simple de grep le processus Java et de tuer en utilisant Ansible. Faites-moi savoir si vous rencontrez un problème lors de l'exécution de ce Ansible playbook
.