2017-10-05 6 views
1

Je crée mon premier script d'initialisation sur CentOS 7. Et je veux exécuter un processus en tant que deamon sur ce script, et essayer d'utiliser la fonction démon de/etc/Fichier init.d/functions, mais lorsque j'inclus ce script, l'exécution s'arrête.Le script Bash s'arrête après avoir inclus /etc/init.d/functions

mon fichier créé Supposons est "/etc/init.d/UpdateScript" Si j'écris:

echo "Script start" 
. /etc/init.d/functions 
echo "After add functions" 

Ainsi, après commande: /etc/init.d/UpdateScript commencer

I avoir seulement "Script start" en sortie. Mais si je commente "#. /etc/init.d/functions", j'ai aussi "After add functions" mais bien sûr "daemon: command not found". Quelle est la raison de ce comportement étrange? Comment le réparer?

+0

Essayez 'set -x' pour voir où'/etc/init.d/functions' se termine. –

+0

'/ etc/init.d' est obsolète dans CentOS 7 avec le passage à systemd. Essayez d'utiliser '/ lib/lsb/init-functions' pour une alternative plus portable. Vous devrez installer le paquet 'redhat-lsb-core' si vous ne l'avez pas déjà. Mieux encore, écrivez un fichier systemd '.service' au lieu d'un script de démarrage init.d-style. –

+0

Utilisez-vous 'set -e' dans votre script? –

Répondre

0

/etc/init.d/functions se termine par return 0. Lorsque vous source (ou .) un script shell vous remplacez effectivement l'appel source avec son contenu. Comme il y a un retour là, l'exécution ne continue pas après elle, et echo "After add functions" n'est jamais exécutée.

+0

Sur quelle version de CentOS 7 se termine-t-il par 'return 0'? Ce n'est pas sur mon système 7.2. (Comment ça, même? 'Return' ne fonctionne que dans les fonctions.) –

+0

J'ai noté cela sur mon Fedora 26. Je suppose que c'est similaire sur les systèmes CentOS/RHEL, mais je n'en ai pas un en main pour vérifier. – Mureinik

+0

Oui, il se termine vraiment par "return 0", peut-être à cause de la dépréciation de init.d. – kukuruzo91