¿Hay una manera fácil de crear un script rc de FreeBSD?

9

Tengo una cárcel de FreeBSD en la que ejecuto un servidor usando el comando:

/usr/sbin/daemon /path/to/script.py

En este momento tengo que ejecutar este comando cada vez que reinicio la máquina y comienza la cárcel. Me gustaría que este comando comenzara desde /etc/rc. ¿Hay una manera fácil de crear un script rc de FreeBSD para un daemoncomando?


ACTUALIZACIÓN: leí esta documentación de BSD sobre los scripts rc , y de ahí creé el siguiente script en /etc/rc.d/pytivo:

#!/bin/sh

. /etc/rc.subr

name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"

command="/usr/sbin/daemon -u jnet $procname"

load_rc_config $name
run_rc_command "$1"

Esto funciona para iniciar el script de Python que quiero como demonio cuando comienza la cárcel ... (dado pytivo_enable="YES"está /etc/rc.conf) pero el script rc no sabe si el demonio se está ejecutando (cree que no es así) y da una advertencia cuando intento iniciarlo:

[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]# 

Por lo tanto, está cerca y funciona , pero siento que debería poder obtener una mejor funcionalidad que esta.

Josh
fuente
Debe colocar este script en algún lugar (no puedo recordarlo ahora) y poner una línea XX_enable="YES"en /etc/rc.conf para que se inicie automáticamente. Comience por encontrar los scripts existentes
daisy
Estoy buscando una manera fácil de crear el script ... ¿Hay un buen script que pueda copiar y reutilizar?
Josh

Respuestas:

11

commandNo debe contener varias palabras. Esta es la causa del [error que ves. Debe establecer cualquier indicador por separado.

Además, debe usar pytivo_userpara configurar el uid en ejecución, y no daemon -u. Consulte la página del comando man rc.subr (8) para ver todas estas variables mágicas.

Además, debe informar al subsistema rc que pytivo es un script de Python para que pueda encontrar el proceso cuando verifica si se está ejecutando.

Finalmente, deberías usar el idiomático set_rcvarpara rcvar.

Algo como esto (no estoy seguro de que esta sea la ruta correcta de Python):

#!/bin/sh

# REQUIRE: LOGIN

. /etc/rc.subr

name=pytivo
rcvar=`set_rcvar`
command=/usr/local/pytivo/pyTivo.py
command_interpreter=/usr/local/bin/python
pytivo_user=jnet
start_cmd="/usr/sbin/daemon -u $pytivo_user $command"

load_rc_config $name
run_rc_command "$1"
Aecolley
fuente
El problema es que usr/local/pytivo/pyTivo.py no daemoniza , por lo tanto, sin llamar /usr/bin/daemon, solo obtendré el comando ejecutándose en primer plano cuando ejecuto/etc/rc.d/pytivo start
Josh
Sin embargo, esto corrige los comandos statusy stop!
Josh
Oh, el guión no demoniza? Creo que la solución más fácil es establecer start_cmdantes de llamar load_rc_config:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
aecolley
Esto tenía la magia que necesitaba para ejecutar mi script. ¡Gracias!
Dave Martorana
0

Si no necesita un script rc, puede usar solo /etc/rc.local.

Para su script rc le faltan comentarios dependientes, al menos una línea

# REQUIRE: LOGIN

debería ayudar, que se ejecute en el momento adecuado.

También es posible que deba definir un archivo pid

pytivo_pidfile="/path/to/your/pidfile"
Arved
fuente
Tenía la esperanza de que esto ayudaría, pero no lo hace. Todavía obtengo : /usr/sbin/daemon: unexpected operatory mi script rc todavía no sabe si el script realmente se está ejecutando.
Josh el
podría intentar invocar el script con -x para ver qué comando falla
surgió el