我试图创建ansible一个任务,执行一个shell命令来运行使用和在守护进程模式的可执行文件。 喜欢的东西下面
-name: Start daemon
shell: myexeprogram arg1 arg2 &
如果我继续和任务立即返回,该进程没有启动什么我看到的是。 如果我删除&ansible任务等待相当长的一段时间没有回来。
在欣赏有道建议通过ansible在守护进程模式下启动程序。 请注意,我不想运行此作为一项服务,但基于某些条件即席后台进程。
我试图创建ansible一个任务,执行一个shell命令来运行使用和在守护进程模式的可执行文件。 喜欢的东西下面
-name: Start daemon
shell: myexeprogram arg1 arg2 &
如果我继续和任务立即返回,该进程没有启动什么我看到的是。 如果我删除&ansible任务等待相当长的一段时间没有回来。
在欣赏有道建议通过ansible在守护进程模式下启动程序。 请注意,我不想运行此作为一项服务,但基于某些条件即席后台进程。
与“&”正在运行的程序没有任何程序的守护进程,它只是在后台运行。 做一个“真正的守护”你的程序应该做描述的步骤在这里 。
如果你的程序是用C写的,你可以调用守护进程()函数,它会为你做它。 然后你就可以在年底启动的程序,即使没有“&”,它会被作为守护程序运行。
另一种选择是使用调用程序守护进程 ,这应该做的工作也是如此。
- name: Start daemon
shell: daemon -- myexeprogram arg1 arg2
当你(或Ansible)注销退出信号仍然会被发送到正在运行的进程,即使它在后台运行。
您可以使用nohup
来规避。
- name: Start daemon
shell: nohup myexeprogram arg1 arg2 &
http://en.wikipedia.org/wiki/Nohup
从你想要达到什么样的简要描述,这听起来像它会是最适合你设置你的可执行文件(使用新贵或类似的)一个服务,然后启动/停止它需要根据需要它的其他条件一直在运行(或不运行)。
尝试运行这是一个过程,否则将需要具有捕捉PID或相似的,所以你可以尝试,当你需要关闭你已经开始了守护,用非常复杂的相同数量的安装一个init配置文件将采取并且没有系统如暴发户给你的控制,如启动的细微/停止。
我发现最好的办法,特别是因为我想输出将被记录,是使用“守护进程”包。 如果你是在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
添加到守护进程的建议上面,如果你想在你可以做一个特定目录来启动程序:
- 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标志以记录输出。