2011-09-19 16 views

Respuesta

4

Como alternativa, puede utilizar la función daemon definido en su /etc/init.d/functions archivo:

daemon --user=<user> $DIR/program 

Si nos fijamos en su sintaxis puede hacer otras cosas como la definición de la ubicación del archivo PID, el establecimiento de buen nivel, y cualquier cosa. De lo contrario, es realmente útil para iniciar servicios como daemons. Los servicios iniciados con daemon pueden ser terminados fácilmente por otra función de funciones, killproc.

+0

Gracias. El problema al que me estoy enfrentando es que es un proceso que necesita ejecutarse desde un directorio en particular, pero el proceso en sí no está realmente en ese directorio. –

2

Se puede crear un guión bajo /etc/init.d/ dicen your_service_name, con contenidos mínimos

#!/bin/sh
su - <user> -c "bash -c 'cd $DIR ;<service name>'"

proporciona el permiso apropiado para el guión. Ahora use el comando update-rc.d en el directorio /etc/rc<run_level>.d requerido para crear un enlace suave para su secuencia de comandos para que la secuencia de comandos se ejecute cuando el sistema comience con el nivel de ejecución mencionado.
Consulte los scripts en /etc/init.d/ como referencia &, vaya a /etc/init.d/README para obtener más información sobre cómo escribir el script. La página Man para update-rc.d también ayudará a conocer el uso de update-rc.d. Esto definitivamente funciona en la máquina Ubuntu que uso, pero supongo que esta instalación estará disponible en todas las distribuciones.
Espero que esto ayude!

1

que tenían el mismo problema y lo resolvió por

  1. Crear escritura del golpe y lo puso en /etc/init.d/ usando siguiente patrón
    #!/bin/bash
    su <user> -c "bash -c '<path to service> $1'"

  2. Configuración ejecutar códigos para la secuencia de comandos mediante el siguiente comando
    sudo update-rc.d <my_scrpit> defaults

Una vez que esta secuencia de comandos está configurada en códigos de ejecución, al reiniciar, ejecute la secuencia de comandos y pasará la secuencia de inicio/detención al script como $ 1, dependiendo del estado del modo de ejecución.
Si desea probar su script sin reiniciarlo, debe ejecutarlo como root y pasar la acción de servicio, p. iniciar/detener/reiniciar ....
root# ./etc/init.d/my_scrpit start

+0

Intenté aplicarlo en Ubuntu 16.04 en '/ etc/rc.local', pero mi script de prueba no se ejecutó: ' su -l usuario -c "bash/home/user/bin/start_check" '. El script esperaba escribir algunos registros. – beemaster

20

Ubuntu usa start-stop-daemon que ya soporta esta característica.

utilizar el archivo de esqueleto de /etc/init.d: ​​

sudo cp /etc/init.d/skeleton /etc/init.d/mynewservice

Editar mynewservice adecuadamente.

Agregue el parámetro siguiente a las líneas que llamen a start-stop-daemon:

--chuid username:group

Ejemplo:

Cambio

start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

a

start-stop-daemon --start --quiet --chuid someuser:somegroup --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

Por último, inscriba su servicio y iniciarlo:

update-rc.d mynewservice defaults 99 && service mynewservice start

Más información sobre otras opciones para start-stop-daemon here

Cuestiones relacionadas