Ansible Playbook to run Shell commands

36,110

You don't even need a playbook to do this :

  • Restarting nginx :

ansible your_host -m service -a 'name=nginx state=restarted'

(see service module)

  • Kill a process by process id

ansible your_host -m command -a 'kill -TERM your_pid'

(adjust signal, and use pkill/killall if you need to match a name; see command module)

However, I wouldn't say that ansible shines if you're just using it for ad-hoc commands.

If you need a tutorial to get you started with playbooks, there is one over here.

Now if you can to put these (the official name for service, commands, etc.. are modules) in a playbook (let's call it playbook.yml), you can just :

- hosts: webappserver
  tasks:
    - name: Stops whatever
      command: kill -TERM your_pid
      notify:
        - Restart nginx

    - name: Another task
      command: echo "Do whatever you want to"

  handlers:
    - name: Restart nginx
      service: name=nginx state=restarted

Create an inventory file (hosts) containing :

# webappserver should resolve !
webappserver

Invoke with :

ansible playbook.yml -i hosts

and it should work.

This is all very basic and can be grasped easily reading the docs or any tutorial out there.

Share:
36,110
Rai Ehtisham
Author by

Rai Ehtisham

Python,PHP,Java and Frontend Developer with experties in Oracle Administration and SQL.

Updated on December 18, 2020

Comments

  • Rai Ehtisham
    Rai Ehtisham over 3 years

    I recently dived into Ansible for one of my servers, and found it really interesting and time saving. I am running an Ubuntu dedicated server and have configured number of web applications written on Python and a few on PHP. For Python I am using uwsgi as the HTTP gateway. I have written shell scripts to start/restart a few processes in order to run the instance of a specific web application. What I have to do everytime is, connect ssh and navigate to that specific application and run the script.

    WHAT I NEED

    I've been trying to find a way to write Ansible playbook to do all that from my personal computer with one line of command, but I have no clue how to do that. I have'nt found a very explanatory (for a beginner) documentation or help on the internet.

    QUESTION

    How can I restart Nginx with Ansible playbook? How can I kill a process by process id?

  • Rai Ehtisham
    Rai Ehtisham over 10 years
    I'm not talking about ad-hoc commands. When restarting a project's instance, my shell script kills the process by id and then starts the process again and clears any logs generated by the application. I need to know, is it possible to do it in a playbook to avoid running that shell script every time i want to restart the instance, by logging into the server using ssh and bla bla bla.
  • leucos
    leucos over 10 years
    Yes. The commands I mentioned can be put in a playbook. See edited answer.
  • Rai Ehtisham
    Rai Ehtisham over 10 years
    Thx for the help, will get back to you on this in a few hours
  • leucos
    leucos over 10 years
    Nice ! Good luck with Ansible, it's great !