Daemonizing在ansible可执行Daemonizing在ansible可执行(Daemo

2019-05-12 01:31发布

我试图创建ansible一个任务,执行一个shell命令来运行使用和在守护进程模式的可执行文件。 喜欢的东西下面

-name: Start daemon
  shell: myexeprogram arg1 arg2 &

如果我继续和任务立即返回,该进程没有启动什么我看到的是。 如果我删除&ansible任务等待相当长的一段时间没有回来。

在欣赏有道建议通过ansible在守护进程模式下启动程序。 请注意,我不想运行此作为一项服务,但基于某些条件即席后台进程。

Answer 1:

与“&”正在运行的程序没有任何程序的守护进程,它只是在后台运行。 做一个“真正的守护”你的程序应该做描述的步骤在这里 。

如果你的程序是用C写的,你可以调用守护进程()函数,它会为你做它。 然后你就可以在年底启动的程序,即使没有“&”,它会被作为守护程序运行。

另一种选择是使用调用程序守护进程 ,这应该做的工作也是如此。

- name: Start daemon
  shell: daemon -- myexeprogram arg1 arg2


Answer 2:

当你(或Ansible)注销退出信号仍然会被发送到正在运行的进程,即使它在后台运行。

您可以使用nohup来规避。

- name: Start daemon
  shell: nohup myexeprogram arg1 arg2 &

http://en.wikipedia.org/wiki/Nohup



Answer 3:

从你想要达到什么样的简要描述,这听起来像它会是最适合你设置你的可执行文件(使用新贵或类似的)一个服务,然后启动/停止它需要根据需要它的其他条件一直在运行(或不运行)。

尝试运行这是一个过程,否则将需要具有捕捉PID或相似的,所以你可以尝试,当你需要关闭你已经开始了守护,用非常复杂的相同数量的安装一个init配置文件将采取并且没有系统如暴发户给你的控制,如启动的细微/停止。



Answer 4:

我发现最好的办法,特别是因为我想输出将被记录,是使用“守护进程”包。 如果你是在CentOS /红帽,像下面。 有可能是还一个恰当的包装它。

- name: yum install daemonize
  yum:
    name: daemonize
    state: latest

- name: run in background, log errors and standout to file
  shell:  daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log  /opt/myscripts/myprocess.sh


Answer 5:

添加到守护进程的建议上面,如果你想在你可以做一个特定目录来启动程序:

- name: install daemonize package
  package:
    name: daemonize
    state: latest
- name: start program
  command: daemonize -c /folder/to/run/in /path/to/myexeprogram arg1 arg2

值得注意的是,你还可能希望-e -o标志以记录输出。



文章来源: Daemonizing an executable in ansible