J'ai une prison FreeBSD dans laquelle j'exécute un serveur en utilisant la commande:
/usr/sbin/daemon /path/to/script.py
Pour le moment, je dois exécuter cette commande chaque fois que je redémarre la machine et que la prison démarre. J'aimerais que cette commande démarre /etc/rc
. Existe-t-il un moyen simple de créer un script rc FreeBSD pour une daemon
commande?
MISE À JOUR: J'ai lu cette documentation BSD sur les scripts rc , et à partir de là j'ai créé le script suivant dans /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"
Cela fonctionne pour démarrer le script python que je veux en tant que démon lorsque la prison démarre ... (donné pytivo_enable="YES"
est /etc/rc.conf
dedans) mais le script rc ne sait pas si le démon est en cours d'exécution (il pense que ce n'est pas le cas) et il donne un avertissement lorsque j'essaie de le démarrer:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
C'est donc proche , et cela fonctionne , mais je pense que je devrais être en mesure d'obtenir de meilleures fonctionnalités que cela.
XX_enable="YES"
dans /etc/rc.conf pour le faire démarrer automatiquement. Commencez par trouver les scripts existantsRéponses:
command
ne doit pas contenir plusieurs mots. C'est la cause de l'[
erreur que vous voyez. Vous devez définir tous les drapeaux séparément.En outre, vous devez utiliser
pytivo_user
pour définir l'uid en cours d'exécution, et nondaemon -u
. Consultez la page de manuel rc.subr (8) pour toutes ces variables magiques.En outre, vous devez informer le sous-système rc que pytivo est un script Python afin qu'il puisse trouver le processus lorsqu'il vérifie s'il fonctionne.
Enfin, vous devez utiliser l'idiomatique
set_rcvar
pourrcvar
.Quelque chose comme ça (je ne suis pas sûr que ce soit le bon chemin Python):
la source
usr/local/pytivo/pyTivo.py
cela ne démonifie pas , donc sans appeler,/usr/bin/daemon
je vais juste exécuter la commande dans le premier plan lorsque je cours/etc/rc.d/pytivo start
status
etstop
!start_cmd
avant d'appelerload_rc_config
:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
Si vous n'avez pas besoin d'un script rc, vous pouvez utiliser simplement /etc/rc.local.
Pour votre script rc il vous manque des commentaires dépendants, au moins une ligne
devrait aider, qu'il est exécuté au bon moment.
Vous devrez peut-être également définir un fichier pid
la source
: /usr/sbin/daemon: unexpected operator
et mon script rc ne sait toujours pas si le script est réellement en cours d'exécution.