Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Daemonizing an executable in ansible

Tags:

I am trying to create a task in ansible which executes a shell command to run an executable in daemon mode using &. Something like following

-name: Start daemon   shell: myexeprogram arg1 arg2 & 

What am seeing is if I keep & the task returns immediately and the process is not started . If I remove & ansible task waits for quite some time without returning.

Appreciate suggestion on proper way to start program in daemon mode through ansible. Pls note that I dont want to run this as a service but an adhoc background process based on certain conditions.

like image 339
user3364247 Avatar asked Apr 22 '15 19:04

user3364247


People also ask

Can Ansible run shell scripts?

Though Ansible Shell module can be used to execute Shell scripts. Ansible has a dedicated module named Script which can be used to copy the Shell script from the control machine to the remote server and to execute. Based on your requirement you can use either Script or Shell module to execute your scripts.

How do you handle long running tasks in Ansible?

By default, for Ansible tasks, the connections stay open until the task is done on each node, but this may not be the desired behavior for some functions as sometimes the task can take more time than SSH timeouts. You can run such long running tasks in the background and check their status later.

What shell does Ansible use?

Ansible's shell module executes shell commands on remote hosts. By default, the shell module uses the /bin/sh shell to execute commands, but it's possible to use other shells such as /bin/bash by passing the executable argument.


1 Answers

Running program with '&' does not make program a daemon, it just runs in background. To make a "true daemon" your program should do steps described here.

If your program is written in C, you can call daemon() function, which will do it for you. Then you can start your program even without '&' at the end and it will be running as a daemon.

The other option is to call your program using daemon, which should do the job as well.

- name: Start daemon   shell: daemon -- myexeprogram arg1 arg2 
like image 168
Karel Jakubec Avatar answered Oct 04 '22 18:10

Karel Jakubec