12

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?

tlo
  • 1,571
  • 1
  • 25
  • 38
Rai Ehtisham
  • 151
  • 1
  • 2
  • 11

1 Answers1

14

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.

leucos
  • 17,661
  • 1
  • 44
  • 34
  • 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. – Rai Ehtisham Nov 24 '13 at 21:54
  • Yes. The commands I mentioned can be put in a playbook. See edited answer. – leucos Nov 24 '13 at 22:00
  • Thx for the help, will get back to you on this in a few hours – Rai Ehtisham Nov 25 '13 at 06:14
  • Nice ! Good luck with Ansible, it's great ! – leucos Nov 30 '13 at 18:43