2016-02-27 72 views
4

我剛開始使用Ansible,並且在運行服務器時遇到問題。與Ansible一起運行服務器

我有一臺服務器可以使用java -jar target/server-1.0-SNAPSHOT.jar啓動。但是,這將啓動服務器並保持運行永遠顯示輸出,所以Ansible永遠不會結束。

這是我嘗試從未完成:

- name: Start server 
    command: chdir=~/server java -jar target/server-1.0-SNAPSHOT.jar 

什麼是做到這一點的正確方法?

+1

您應該創建一個啓動腳本(與Ansible無關)。 Debian中的init.d腳本或CentoOS中的systemd服務腳本。然後,您可以使用Ansible的「服務」模塊來啓動/停止/重新啓動您的服務。 – udondan

+0

不是一個乾淨的選擇:使用'shell'模塊並將該命令放在後臺,另外從shell中分離出來。 – heemayl

回答

3

請按照@udondan的建議創建服務,或使用異步任務啓動服務器。 http://docs.ansible.com/ansible/playbooks_async.html

+3

異步可以工作,但不是像@maeh所說的那樣,是「正確」的方式。異步任務非常適合在遊戲結束時完成的任務;使用它來啓動服務器/守護進程絕對不是。 – tedder42

2

如@Petro026建議,您的選擇是異步任務或創建服務。

我強烈建議對異步任務的方法。這是一個非常脆弱的解決方案:

  • 如果主機重新啓動會怎麼樣?
  • 如果你運行你的劇本兩次會怎麼樣?
  • 如果你的服務器應用程序剛剛死亡怎麼辦?

最好的辦法是爲它創建一個服務,可能是它的最簡單的方法將涉及使用的過程控制系統,如supervisord,這是由ansible支持。

文檔:

主管是一個客戶機/服務器系統,它允許用戶監視 和控制在UNIX之類的操作系統的一些過程。

0

把它放在PID中並將輸出發送到nohup。

事情是這樣的:

nohup的Java的罐子目標/服務器-1.0-SNAPSHOT.jar &

在你的劇本:

  • 名稱:啓動服務器 命令:CHDIR =〜/server nohup java -jar target/server-1.0-SNAPSHOT.jar &

如果你想殺死進程kill -9 #numerofpid。