Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Standard or best way to keep alive process started by init.d [closed]

I'm looking for a standard way or best practice to keep a daemon started by an init.d shell script alive.

Or even better, is there a way to keep it alive directly from /etc/init.d?

Specifically, I have a daemon called dtnd with and infinite loop that looks for down precess, if there are any, the daemon wake up them again. Also, I use the start-stop-daemon tool in order to let the precess by run from a given system user.

I want to run this dtnd daemon from startup. In order to achieve this behavior I created a init.d script that "wraps" the dtnd file using start, stop and status commands.

I have 2 questions that I will like to solve:

  1. Is there a way to achieve keeping alive some process from init.d shell script. Is an standard/best way practice?

  2. It's recommended to keep a daemon alive with infinite loop? I guess it's better to use some tool like daemon to achieve that. It's correct?

Thank you so much for your time!

like image 975
Adrian Antunez Avatar asked Nov 01 '22 20:11

Adrian Antunez


1 Answers

You might want to use the daemon(3) library function inside the code of your daemon. You should be aware of syslog(3) (at least to log error conditions). You probably should catch gently the SIGTERM signal. Read carefully signal(7)

Server programs are often event loop based (and it is conceptually an infinite loop). You'll either use en existing event loop library (e.g. libev, libevent, glib, ...) or build your own one around a multiplexing syscall like poll(2)

Read Advanced Linux Programming and study the source code of some existing free software daemon.

Perhaps dbus is also relevant for your goals (which I don't really understand: what does "looks for down process" exactly means? You could set some limits with setrlimit(2) often invoked thru the ulimit bash builtin in some .bashrc)

There is also the @reboot entry for crontab(5), but that is not the recommended practice for system daemons (however you could use it in your user crontab file).

like image 156
Basile Starynkevitch Avatar answered Nov 15 '22 07:11

Basile Starynkevitch