2017-03-06 30 views
0

mybash.sh調用一個應該永遠運行(理論上)的python程序。這意味着異步時間限制應該是無窮大。但是使用以下可能的線路,它會在時間限制後停止,在這種情況下,它會停止。如果我刪除async: 45,執行永遠不會返回的終端作爲python程序不斷運行。Ansible激活一個bash文件,忘記並返回終端

- name: fire and forget 
    command: sh mybash.sh 
    async: 45 
    poll: 0 

我如何讓ansible火,忘記和終端返回ansible的執行(即通過這將mybash.sh永遠運行和ansible的執行在終端名爲Python程序不應該坐等)?

+0

這實在是一個不好的做法。您應該使用合理的方式來配置服務。 –

+0

另外'sh'不是bash。如果你用'sh'啓動它,它是一個POSIX sh腳本,而不是bash腳本。 –

+0

......現在,如果您希望程序脫離啓動它並在後臺運行的進程,那麼您希望它執行的動作本身就是「守護進程」,並且會有大量搜索結果 - 但自我守護程序/腳本是不好的做法;使用操作系統提供的過程監控系統(可以讓您將其配置爲在啓動時啓動;可以管理故障後重新啓動等),這非常好。 –

回答

0

如果這真的是你想要做配置服務,而不是什麼,你可以這樣做:

- name: fire and forget 
    shell: nohup mybash.sh & 

既然你要使用它,你可能想看看manpage to nohup

+1

強烈建議至少重定向stdout/stderr,以免在某處留下'nohup.out'。 (就我個人而言,我傾向於將nohup視爲不必要的愚蠢行爲 - 不會使用'disown','exec>/dev/null 2>&1'和'trap'命令清除本地bash無法做到的任何事情'HUP'的默認行爲 - 但是... *聳聳肩*) –

+0

@CharlesDuffy正是這樣,我想知道爲什麼'disown'是如此不足...... – heemayl

+0

'nohup'似乎很難從內部使用。 – chicks