C'è un modo semplice per creare uno script rc di FreeBSD?


9

Ho una jail FreeBSD in cui eseguo un server usando il comando:

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

Al momento devo eseguire questo comando ogni volta che riavvio la macchina e la jail si avvia. Vorrei che questo comando fosse avviato /etc/rc. C'è un modo semplice per creare uno script rc di FreeBSD per un daemoncomando?


AGGIORNAMENTO: Ho letto questa documentazione BSD sugli script rc e da quel momento ho creato il seguente script in /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"

Questo funziona per avviare lo script Python che desidero come demone all'avvio della jail ... (dato pytivo_enable="YES"è in /etc/rc.conf) ma lo script rc non sa se il demone è in esecuzione (pensa che non lo sia quando è) e dà un avviso quando provo ad avviarlo:

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

Quindi è vicino e funziona , ma sento che dovrei essere in grado di ottenere funzionalità migliori di così.


Devi mettere questo script da qualche parte (non ricordo ora) e mettere una riga XX_enable="YES"in /etc/rc.conf per farlo partire automaticamente. Inizia trovando gli script esistenti
daisy

Sto cercando un modo semplice per creare la sceneggiatura ... Esiste una buona sceneggiatura che posso copiare e riutilizzare?
Josh,

Risposte:


11

commandnon deve contenere più parole. Questa è la causa [dell'errore che vedi. È necessario impostare eventuali flag separatamente.

Inoltre, dovresti usare pytivo_userper impostare l'Uid corrente e non daemon -u. Vedi la pagina man rc.subr (8) per tutte queste variabili magiche.

Inoltre, dovresti far sapere al sottosistema rc che pytivo è uno script Python in modo che possa trovare il processo quando controlla per vedere se è in esecuzione.

Infine, dovresti usare l'idiomatico set_rcvarper rcvar.

Qualcosa del genere (non sono sicuro che questo sia il percorso Python giusto):

#!/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"

Il problema è che usr/local/pytivo/pyTivo.py non demonizza , quindi senza chiamare otterrò/usr/bin/daemon il comando in primo piano quando corro/etc/rc.d/pytivo start
Josh

Tuttavia, questo corregge i comandi statuse stop!
Josh,

Oh, la sceneggiatura non viene demonizzata? Penso che la soluzione più semplice sia impostare start_cmdprima di chiamare load_rc_config:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
aecolley

Questo aveva la magia di cui avevo bisogno per far funzionare la mia sceneggiatura. Grazie!
Dave Martorana,

0

Se non hai bisogno di uno script rc, puoi usare solo /etc/rc.local.

Per lo script rc mancano i commenti di dipendenza, almeno una riga

# REQUIRE: LOGIN

dovrebbe aiutare, che viene eseguito al momento giusto.

Potrebbe inoltre essere necessario definire un file pid

pytivo_pidfile="/path/to/your/pidfile"

Speravo che questo avrebbe aiutato, ma non lo è. Ricevo ancora : /usr/sbin/daemon: unexpected operatore il mio script rc non sa ancora se lo script è effettivamente in esecuzione.
Josh

potresti provare a invocare lo script con -x per vedere quale comando fallisce
nato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.