J'ai une configuration ascendante pour un service qui doit vérifier l'existence d'un processus sur son démarrage. Cela semble assez facile, mais j'essaie depuis 3 heures de résoudre ce problème et je suis perdu. Le problème semble être que certaines instructions grep conduisent à une sortie du script au démarrage, entraînant une panne lors du démarrage du service. Mais upstart ne bloque rien, il sort du script et est parti.
Voici quelques lignes d'exemple qui déclenchent le problème: Le premier écho et la sortie de grep sont enregistrés, le deuxième écho est enregistré, mais pas la sortie de grep. Après le deuxième démarrage d'écho, il suffit de quitter le script et de s'arrêter. Le problème est d'ajouter l'option -v ou quelque chose d'autre comme l'utilisation de classes regexp comme [[: digit:]]. Il me semble que j'ai besoin d'échapper à certains personnages mais je ne sais pas comment. Un simple -v ou quelque chose comme ça ne fonctionne pas.
script echo grep ps ax | grep "postgres: wal writer process" | grep "grep" echo grep2 ps ax | grep "postgres: wal writer process" | grep -v "grep" end script
Est-ce que quelqu'un a une idée de ce que je fais mal et comment résoudre le problème?
Comme expliqué dans le manuel , tous les scripts fonctionnent avec sh -e
. Cela signifie que toute erreur de commande non gérée met fin au script avec une erreur. Si vous avez un code qui pourrait renvoyer l'échec, vous le coderez comme
command || true
Ou l'envelopper dans un état conditionnel ou quelque chose.
Par le passage, votre code est mieux écrit en tant que
ps ax | grep "[p]ostgres: wal writer process"
Voir aussi https://stackoverflow.com/questions/9375711/more-elegant-ps-aux-grep-v-grep
Donc, en résumé, vous recherchiez probablement quelque chose comme
if ps aux | grep '[p]ostgres: wal writer process' then : already running else : start it up fi
Maintenant que grep
est exécuté dans le cadre d'un conditionnel, une défaillance n'est plus considérée comme non gérée (même si vous n'avez pas d' else
clause!) Et donc il fonctionnera en toute sécurité sous set -e
.