在ansible中守护可执行文件
Daemonizing an executable in ansible
我正在尝试在 ansible 中创建一个任务,该任务使用 & 在守护进程模式下对 运行 可执行文件执行 shell 命令。喜欢关注
-name: Start daemon
shell: myexeprogram arg1 arg2 &
我看到的是如果我立即保留 & 任务 returns 并且进程没有启动。如果我删除 & ansible 任务等待很长一段时间而不返回。
感谢有关通过 ansible 以守护进程模式启动程序的正确方法的建议。请注意,我不想 运行 这是一项服务,而是基于特定条件的临时后台进程。
当您(或 Ansible)注销时,退出信号仍将发送到 运行 进程,即使它在后台 运行。
您可以使用 nohup
来规避它。
- name: Start daemon
shell: nohup myexeprogram arg1 arg2 &
运行 带有“&”的程序不会使程序成为守护进程,它只是在后台运行。要制作 "true daemon",您的程序应该执行 here.
中描述的步骤
如果您的程序是用 C 编写的,您可以调用 daemon() 函数,它将为您完成。然后你可以启动你的程序,即使最后没有'&',它将运行作为守护进程。
另一种选择是使用 daemon 调用您的程序,这也应该可以完成这项工作。
- name: Start daemon
shell: daemon -- myexeprogram arg1 arg2
根据您想要实现的目标的简要描述,听起来您最好将可执行文件设置为服务(使用 Upstart 或类似服务),然后根据需要 start/stop在要求它是 运行ning(或不是 运行ning)的其他条件下。
尝试 运行 将此作为一个进程,否则将需要捕获 PID 或类似的东西,这样您就可以在需要时尝试关闭已启动的守护进程,而且数量几乎相同安装初始化配置文件的复杂性,并且没有 Upstart 等系统为您提供 start/stop.
等控件的好处
我发现最好的方法是使用 "daemonize" 包,特别是因为我想记录输出。如果你在 CentOS/Redhat,如下所示。可能还有一个适合它的 apt-package。
- 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
添加上面的 daemonize 建议,如果你想在特定目录中启动你的程序,你可以这样做:
- 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 标志来记录输出。
我正在尝试在 ansible 中创建一个任务,该任务使用 & 在守护进程模式下对 运行 可执行文件执行 shell 命令。喜欢关注
-name: Start daemon
shell: myexeprogram arg1 arg2 &
我看到的是如果我立即保留 & 任务 returns 并且进程没有启动。如果我删除 & ansible 任务等待很长一段时间而不返回。
感谢有关通过 ansible 以守护进程模式启动程序的正确方法的建议。请注意,我不想 运行 这是一项服务,而是基于特定条件的临时后台进程。
当您(或 Ansible)注销时,退出信号仍将发送到 运行 进程,即使它在后台 运行。
您可以使用 nohup
来规避它。
- name: Start daemon
shell: nohup myexeprogram arg1 arg2 &
运行 带有“&”的程序不会使程序成为守护进程,它只是在后台运行。要制作 "true daemon",您的程序应该执行 here.
中描述的步骤如果您的程序是用 C 编写的,您可以调用 daemon() 函数,它将为您完成。然后你可以启动你的程序,即使最后没有'&',它将运行作为守护进程。
另一种选择是使用 daemon 调用您的程序,这也应该可以完成这项工作。
- name: Start daemon
shell: daemon -- myexeprogram arg1 arg2
根据您想要实现的目标的简要描述,听起来您最好将可执行文件设置为服务(使用 Upstart 或类似服务),然后根据需要 start/stop在要求它是 运行ning(或不是 运行ning)的其他条件下。
尝试 运行 将此作为一个进程,否则将需要捕获 PID 或类似的东西,这样您就可以在需要时尝试关闭已启动的守护进程,而且数量几乎相同安装初始化配置文件的复杂性,并且没有 Upstart 等系统为您提供 start/stop.
等控件的好处我发现最好的方法是使用 "daemonize" 包,特别是因为我想记录输出。如果你在 CentOS/Redhat,如下所示。可能还有一个适合它的 apt-package。
- 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
添加上面的 daemonize 建议,如果你想在特定目录中启动你的程序,你可以这样做:
- 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 标志来记录输出。