2013-11-24 247 views
9

我最近潛入Ansible爲我的一臺服務器,發現它真的很有趣並且節省時間。我正在運行一個Ubuntu專用服務器,並已配置了多個用Python編寫的Web應用程序和一些PHP。 對於Python,我使用uwsgi作爲HTTP網關。我編寫了shell腳本來啓動/重新啓動幾個進程以運行特定Web應用程序的實例。 我每次都必須做的是,連接ssh並導航到特定的應用程序並運行腳本。Ansible Playbook運行Shell命令

我需要什麼

我一直試圖找到一種方法來寫Ansible劇本做一切從我的個人計算機命令的一個線,但我不知道該怎麼做。我還沒有找到一個解釋性的(對於初學者)文檔或在互聯網上的幫助。

問題

如何使用Ansible playbook重新啓動Nginx? 如何通過進程ID來終止進程?

回答

12

你甚至不需要一個劇本要做到這一點:

  • 重啓nginx的:

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

(見service module

  • 通過殺死某進程進程號

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

(調整信號,並使用pkill的/ killall如果你需要匹配的名稱;請參閱command module

但是,如果您只是將它用於臨時命令,我不會說這是可以理解的。

如果你需要一個教程來讓你開始使用劇本,那麼有一個over here

現在,如果你可以把這些在劇本(姑且稱之爲playbook.yml)(正式​​名稱爲服務,命令等。是modules),你可以:

- 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 

創建含有清單文件(hosts):

# webappserver should resolve ! 
webappserver 

調用與:

ansible playbook.yml -i hosts 

,它應該工作。

這是非常基本的,可以很容易地閱讀文檔或任何教程。

+0

我不是在談論ad-hoc命令。當重新啓動項目的實例時,我的shell腳本通過id殺死進程,然後再次啓動進程並清除應用程序生成的所有日誌。我需要知道,是否可以在劇本中做到這一點,以避免每次我想重新啓動實例時都運行該shell腳本,方法是使用ssh和bla bla bla登錄到服務器。 –

+0

是的。我提到的命令可以放在劇本中。見編輯的答案。 – leucos

+0

Thx幫忙,幾個小時內就會回覆給你 –