
Tengo un programa en C que quiero ejecutar como demonio. Estoy trabajando en ubuntu 14.04LTS. ¿Cuál es la forma correcta de hacerlo? ¿Alguien puede ayudar?
Respuesta1
Y ahora, la respuesta de Ubuntu.
La forma correcta de hacerlo es bajo el administrador de demonios que viene con Ubuntu 14. Lo que otros han dicho aquí sobre diseñar un programa explícitamente para que sea un demonio y llamar a una daemon()
función de biblioteca es completamente erróneo. Irónicamente, Ubuntu tuvo tres lanzamientos LTSprevioa la versión 14 LTS; de hecho, desde Ubuntu 6.10 en 2006. Desde entonces ha tenido un administrador demoníaco, de un tipo u otro.
La respuesta correcta para las personas con una gestión adecuada del servicio ha sido que ustednollama daemon()
y tunoTome medidas especiales para "ser un demonio". Y para algunas personas ésta ha sido la respuesta correcta desde principios de los años 1990. Incluso 2006 llegó algo tarde a la fiesta. ☺ Aun así, definitivamente ha sido la respuesta correcta durante los últimos diez años cuando se trata de Ubuntu.
Lo que haces es simple. Usted configura un archivo de "trabajo" advenedizo que le indica cuándo y cómo invocar su programa. advenedizo lo invocaya endemoniado, sin terminal de control y con un estado de proceso inicial predecible e invariable. tu programano hace nada especialy simplemente se ejecuta, escribiendo registros y mensajes de error en error estándar de la forma normal. Usted organiza en el archivo de trabajo cómo el advenedizo maneja lo que está escrito en error estándar.
Ellibro de cocina advenedizodescribe todo esto en detalle, incluidas las diversas estrofas que controlan los eventos de inicio y el manejo de registros. Y hay mucho sobre el tema aquí y en AskUbuntu.
Esté preparado para el hecho de que el mundo cambiará significativamente para usted si luego actualiza a Ubuntu 16 LTS. Pero aún asíno haga nada especial en el código y simplemente ejecútelo bajo un administrador de demoniosseguirá siendo la respuesta correcta.
Otras lecturas
- James Hunt y Clint Byrum (2014). "Consola". Libro de cocina advenedizo.
- https://unix.stackexchange.com/a/200281/5132
- en esoPáginas del manual de Ubuntu 14.04. Canónico.
- Jonathan de Boyne Pollard (2001). Errores a evitar al diseñar programas demonio Unix. Respuestas dadas con frecuencia.
- https://superuser.com/a/723333/38062
- https://askubuntu.com/a/613814/43344
Respuesta2
Si su problema es ejecutar el programa desde una terminal, aquí hay algunas formas (su programa no debe solicitar ninguna entrada del usuario):
Usando
nohup
:nohup program > program.log 2>program.err &
. Luego puedes salir de la terminal.Usando
atd
el servicio:echo "program > program.log 2>program.err" | at now
oecho "program > program.log 2>program.err" | batch
.como servicio mediante un script de arranque.
Si su programa solicita la entrada del usuario, entonces no será posible ejecutarlo fuera de una terminal, lo mejor es usar una sesión screen
o tux
luego desconectarla de la terminal.