Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spawn a background process in Ruby

I'm writing a ruby bootstrapping script for a school project, and part of this bootstrapping process is to start a couple of background processes (which are written and function properly). What I'd like to do is something along the lines of:

`/path/to/daemon1 &` `/path/to/daemon2 &` `/path/to/daemon3 &` 

However, that blocks on the first call to execute daemon1. I've seen references to a Process.spawn method, but that seems to be a 1.9+ feature, and I'm limited to Ruby 1.8.

I've also tried to execute these daemons from different threads, but I'd like my bootstrap script to be able to exit.

So how can I start these background processes so that my bootstrap script doesn't block and can exit (but still have the daemons running in the background)?

like image 736
Dave DeLong Avatar asked Mar 23 '10 23:03

Dave DeLong


2 Answers

As long as you are working on a POSIX OS you can use fork and exec.

fork = Create a subprocess

exec = Replace current process with another process

You then need to inform that your main-process is not interested in the created subprocesses via Process.detach.

job1 = fork do   exec "/path/to/daemon01" end  Process.detach(job1)  ... 
like image 119
Marcel Jackwerth Avatar answered Sep 19 '22 09:09

Marcel Jackwerth


better way to pseudo-deamonize:

`((/path/to/deamon1 &)&)`  

will drop the process into it's own shell.

best way to actually daemonize:

`service daemon1 start` 

and make sure the server/user has permission to start the actual daemon. check out 'deamonize' tool for linux to set up your deamon.

like image 21
Ihate_SA_admins Avatar answered Sep 23 '22 09:09

Ihate_SA_admins