2008-11-12 22 views
1

J'ai un script qui segmente en permanence - le problème que je ne peux pas résoudre car segfault est dans les bindings python libxml - ne les a pas écrits. Ok, donc sous Linux je courais un inf.loop de sorte que quand le script meurt - il redémarre, comme ceci:Boucle infinie dans FreeBSD

#!/bin/bash 
while [ 1 ] 
do 
nice -n 19 python server.py 
sleep 1 
done 

Eh bien, je ne peux pas sembler trouver/bin/bash dans FreeBSD pour que doesn ne fonctionne pas.

Des idées? Considérez que cron n'est pas une option - l'indisponibilité autorisée est de quelques secondes.

Répondre

3

/bin/sh presque existe certainement, mais si vous avez vraiment besoin bash:

cd /usr/ports/*/bash 
make install 

qui devrait installer bash dans/usr/local/bin/bash je crois

+0

Bien que je veux vraiment unserstand pourquoi cela ne fonctionne pas sous "sh", mais votre recette pour bash a fonctionné - l'installation maintenant. –

+0

La première ligne de votre script indique d'utiliser/bin/bash pour interpréter le contenu du fichier. A moins que vous ne changiez cela en "sh" au lieu de "bash", il va essayer (et échouer, puisqu'il n'existe pas) d'utiliser bash. De même, vous devrez le pointer vers l'endroit où les ports finissent de placer l'exécutable bash. –

+0

Oui, je sais que, ce que je voulais dire, c'est que Changins Shebang à "sh" juste accroché mon système complètement. Il est entré dans une vraie boucle infinie je suppose, même sans sommeil. –

0

Vous ne savez pas quel shell FreeBSD utilise par défaut, mais il vient probablement avec quelques-uns. La page de manuel pour le shell que vous utilisez devrait vous indiquer la syntaxe de la boucle de ce shell. C'est probablement assez similaire.

1

Il y aura un programme shell sur le système, et ce script semblera fonctionner dans pratiquement tous les shell.

Tapez type bash pour voir où bash est. Sinon, essayez sh. Il devrait être là, et cela devrait fonctionner. Prenez le résultat de type bash ou type sh, et utilisez dans à la place de/bin/bash. Sinon, regardez/etc/passwd, cherchez votre compte, et notez ce qu'est le shell. Je crois que c'est le dernier champ, et il dira quelque chose comme/bin/sh ou/usr/bin/bash ou quoi que ce soit. Utilisez cela à la place de/bin/bash.