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)
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
从您想要实现的内容的简要描述中,听起来您最好将可执行文件设置为服务(使用Upstart或类似服务),然后根据需要根据其他条件启动/停止它运行(或不运行).
尝试将此作为一个进程运行,否则将需要捕获PID或类似的,以便您可以尝试在需要时关闭已启动的守护程序,其复杂程度与安装init配置文件相同并且没有像Upstart这样的系统为您提供启动/停止等控制的细节.