在ansible中守护可执行文件

use*_*247 21 shell daemon ansible

我正在尝试在ansible中创建一个任务,该任务执行shell命令以使用&以守护进程模式运行可执行文件.跟随之类的事情

-name: Start daemon
  shell: myexeprogram arg1 arg2 &
Run Code Online (Sandbox Code Playgroud)

我看到的是,如果我保持并且任务立即返回并且该过程未开始.如果我删除&ansible任务等待很长一段时间而不返回.

通过ansible欣赏关于以守护进程模式启动程序的正确方法的建议.请注意,我不想将此作为服务运行,而是基于某些条件进行特殊的后台处理.

小智 17

使用'&'运行程序不会使程序成为守护程序,它只是在后台运行.要制作"真正的守护进程",您的程序应该执行此处描述的步骤.

如果你的程序是用C语言编写的,你可以调用daemon()函数,它将为你完成.然后,即使最后没有"&",您也可以启动程序,它将作为守护程序运行.

另一个选择是使用守护进程调用你的程序,守护进程也可以完成这项工作.

- name: Start daemon
  shell: daemon -- myexeprogram arg1 arg2
Run Code Online (Sandbox Code Playgroud)

  • POSIX 中的“--”是命令的_选项_(全部以破折号“-”开头)和_参数_(可能_也包含破折号)之间的分隔符,因此可能会混淆选项解析...例如,列出安全地保存一个文件,您应该执行 `ls -- $filename` -- 否则,如果文件名本身以破折号开头,您的命令可能会失败。 (2认同)

udo*_*dan 12

当您(或Ansible)注销时,退出信号仍将被发送到正在运行的进程,即使它在后台运行.

你可以用它nohup来规避这一点.

- name: Start daemon
  shell: nohup myexeprogram arg1 arg2 &
Run Code Online (Sandbox Code Playgroud)

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

  • nohup不适用于Ansible.试试吧. (6认同)
  • 这是在非交互式SSH会话中运行的,因此该过程将在会话结束后立即死亡. (3认同)

Phi*_*mes 5

从您想要实现的内容的简要描述中,听起来您最好将可执行文件设置为服务(使用Upstart或类似服务),然后根据需要根据其他条件启动/停止它运行(或不运行).

尝试将此作为一个进程运行,否则将需要捕获PID或类似的,以便您可以尝试在需要时关闭已启动的守护程序,其复杂程度与安装init配置文件相同并且没有像Upstart这样的系统为您提供启动/停止等控制的细节.