Pourquoi mon service de démarrage ne démarre-t-il pas au démarrage du système?

37

Suite à cette question , j'ai écrit un simple service upstart ( /etc/init/pms.conf ) pour ma boîte Ubuntu Server 11.04 sans tête comme suit:

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

Je peux démarrer (ou arrêter) ce service à volonté depuis la ligne de commande:

service pms start

Et je peux voir que cela fonctionne bien.

Cependant, lorsque je démarre ma machine pour la première fois, le service ne démarre pas. Si je SSH dans la boîte et vérifier le statut du service, je reçois:

$ service pms status
pms stop/waiting

Ma question est la suivante: pourquoi cela se produit-il? Pourquoi mon service ne démarre-t-il pas au démarrage?

MISE À JOUR 1 : je ne savais pas si mon service était en cours de démarrage, puis mourrais ou ne commençais pas à démarrer. J'ai ajouté ceci à PMS.sh:

echo "STARTED" > $STARTLOG

Cela me donne évidemment quelque chose à rechercher. Je l'ai testé en démarrant le service moi-même, puis en vérifiant start.log . J'ai ensuite supprimé le start.log et redémarré. Il n'y en avait pas après le redémarrage, il semble donc que le démarrage ne démarre pas définitivement. Je suppose que cela pourrait être la mort plus tôt dans le processus, mais cela semble plutôt improbable étant donné la simplicité de tout cela.

UPDATE 2 : je viens de mettre à niveau vers la version 11.10, qui inclut une mise à niveau, mais ce problème persiste.

MISE À JOUR 3 : comme demandé, j'ai démarré avec --debug . Le résultat de cat /var/log/syslog | grep init est trop long pour être placé dans la question, mais vous le voyez ici .

MISE À JOUR 4 : plus de journaux, cette fois-ci, la configuration initiale est incluse en haut. Exécutez 1 et exécutez 2 .

    
posée Kent Boogaart 24.09.2011 - 14:23
la source

12 réponses

19

Je recommande d'augmenter la verbosité du travail, par exemple en utilisant des entrées de pré-démarrage / post-démarrage.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Plus d’informations sur lien

Consultez également lien

    
réponse donnée Clausi 24.10.2011 - 14:13
la source
14

Ce qui se passe probablement ici, c’est que pms démarre avant l’arrivée de vos cartes réseau, et probablement avant même que l’adaptateur de bouclage (lo). En supposant que nous parlions de PS3 Media Server, il s’agit d’un service en réseau qui n’a probablement pas envie de démarrer sans aucune interface disponible.

Essayez de changer vos critères de départ pour:

start on filesystem and net-device-up IFACE!=lo

Ce qui signifie, commence après que n'importe quelle "vraie" interface réseau est en place. Cependant, cela pourrait ne pas être idéal, si eth0 est la prochaine interface, PMS démarre, mais vous voulez vraiment que PMS utilise wlan0, ce qui ne se fera pas. Le service démarrera mais il se peut qu'il n'ait pas été en mesure de choisir l'interface sur laquelle vous souhaitez l'écouter. En supposant que vous connaissiez l'interface que vous allez diffuser et que celle-ci ne changera pas, je le codifierai dans le job, par exemple:

start on filesystem and net-device-up IFACE=wlan0

Sur Oneiric (11.10), vous pouvez utiliser l'événement static-network-up pour attendre tous les périphériques configurés de manière statique. Ce qui est bien car cela vous permet d'écrire des travaux dépendant du réseau sans coder en dur une interface. [Remarque: par "tous les périphériques configurés de manière statique", je fais référence à l'utilisation de /etc/network/interfaces au lieu de NetworkManager. Cela ne signifie pas statique dans le sens de IP statique contre DHCP.]

    
réponse donnée Mark Russell 24.09.2011 - 17:58
la source
3

Après avoir examiné votre journal syslog, le processus pms démarre sans erreur, mais après quelques instants, son objectif a été modifié de début à fin, ce qui signifie qu'il est tué.

Ceci est un peu étrange car vous avez ajouté la clause repsawn pour qu’elle essaie de recommencer après son arrêt, mais cela ne se produit jamais. Donc, je suppose que vous avez supprimé la clause respawn.

Entre le démarrage et l’arrêt du service pms, seuls 2 services sont lancés ufw et network-interface (eth0), et 1 est lancé udev-fallback-graphics.

Il semblerait que vous traitiez le pms en parallèle. Malheureusement, la documentation de démarrage est un peu floue sur les différences exactes entre start on ... vanilla et start on starting ... et start on started ... .

Essayez de changer votre strophe de démarrage en

start on started networking

ou juste trop

start on net-device-up IFACE=eth0

La sortie du journal est légèrement étrange car l’événement net-device-up se produit beaucoup plus tard, mais pms commence avant lui.

Cela devrait garantir que votre processus ne démarre qu'une fois que la configuration du réseau tous est terminée, c’est-à-dire que le travail n’a pas seulement démarré mais est terminé.

Ne faites pas confiance à la sortie du journal, au début du processus de démarrage, la sortie de la journalisation vers un fichier ne fonctionne pas toujours. Voir la réponse dans Débogage du démarrage .

    
réponse donnée Ciaran Liedeman 26.10.2011 - 16:37
la source
3

Géré pour résoudre un problème similaire en utilisant start on runlevel à la place:

start on runlevel [2345]
    
réponse donnée Laurynas 02.03.2013 - 12:21
la source
3

J'ai eu le même problème et j'ai fini par le résoudre simplement avec:

start on runlevel [2345]

sans net-device-up ou started networking stuff

Ceci est le script de démarrage complet, et il fonctionne parfaitement:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log
    
réponse donnée Daniele B 22.05.2014 - 22:11
la source
1

J'ai rencontré chkconfig lors de ma formation RHCSA / CE:

sudo apt-get install chkconfig
sudo chkconfig pms on

Vous pouvez consulter la page de manuel de Oneiric pour plus de détails sur ses fonctionnalités. .

    
réponse donnée Oxwivi 26.10.2011 - 17:26
la source
1

J'ai trouvé une solution pour cela mais je ne le comprends pas. Si je déplace PMS hors /home/administrator et dans /bin/pms avec root en tant que propriétaire, tout fonctionne bien.

Si je le laisse sous /home/administrator/ mais assurez-vous que root est le propriétaire de toutes les barres du répertoire /home/administrator/ lui-même, cela ne fonctionne toujours pas.

Si je mets l'administrateur en tant que propriétaire de tout et que je change la partie pertinente de mon script en:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

Ca ne marche toujours pas.

Je suppose que pour le moment je vais créer un répertoire /home/root/ et déplacer tout là-bas, même si je voudrais vraiment bien comprendre cela.

    
réponse donnée Kent Boogaart 26.10.2011 - 18:54
la source
1

J'ai eu un problème similaire "sans démarrage" quand j'ai réalisé que mon script dépendait d'un fichier qui se trouvait chez moi et que la maison n'était pas accessible car elle était cryptée avec le mécanisme ubuntu standard (.Private).

start on local-filesystems event est (probablement) émis avant la fin du processus de déchiffrement.

    
réponse donnée alessandro 01.05.2013 - 23:31
la source
1

Votre répertoire personnel est-il sur NFS? Parfois, root ne peut pas accéder à NFS.

Pour mémoire, dans mon petit test du 12.04:

  • start on started networking et start on network-interface-up INTERFACE=eth0 ne fonctionne pas, mais

  • start on started network-interface INTERFACE=eth0 ne le fait pas.

Merci d’avoir lien pour signaler que initctl list toujours montre que le travail en réseau est arrêté.

    
réponse donnée user94311 03.10.2012 - 18:54
la source
0

Dans mon cas, le service upstart dépendait du script situé dans le dossier synchronisé . Résolu le problème en utilisant la ligne suivante:

start on vagrant-mounted

Plus d'infos: lien

    
réponse donnée xuhcc 19.05.2015 - 15:09
la source
0

Semblable à @xuhcc, je suis venu ici pour découvrir pourquoi mon script Vagrant Upstart ne fonctionnait pas. Ce qui suit est censé fonctionner:

  

commence sur le vagabond

Mais ne le fait pas dans certaines versions à cause du bogue suivant.

lien

La solution de contournement répertoriée dans le rapport a été très utile pour moi:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Travaillé très bien pour moi

    
réponse donnée Ian E 29.10.2015 - 03:09
la source
0

cela a fonctionné pour moi (j'ai besoin de démarrer le service après iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
    
réponse donnée MSS 25.12.2016 - 15:11
la source

Lire d'autres questions sur les étiquettes