Suite à cette question , j’ai écrit un simple service de démarrage ( /etc/init/pms.conf ) pour ma boîte sans tête Ubuntu Server 11.04 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 vraiment.
Cependant, lorsque je démarre pour la première fois ma machine, le service ne démarre pas. Si je SSH dans la boîte et vérifier l'état du service, je reçois:
$ service pms status
pms stop/waiting
Ma question est pourquoi cela se produit-il? Pourquoi mon service ne démarre-t-il pas?
MISE À JOUR 1 : ne sachant pas si mon service était démarré et par la suite en train de mourir ou si ce n’était tout simplement pas le cas, j’ai ajouté ce qui suit à PMS.sh:
echo "STARTED" > $STARTLOG
Cela me donne évidemment quelque chose à rechercher. J'ai testé cela en démarrant le service moi-même, puis en vérifiant start.log . J'ai ensuite supprimé le fichier start.log et redémarré. Il n'était pas là après le redémarrage, il semble donc que Upstart ne démarre pas mon service. Je suppose que cela pourrait être en train de mourir plus tôt dans le processus, mais cela semble plutôt improbable compte tenu de la simplicité de tout cela.
MISE À JOUR 2 : Je viens de mettre à jour la version 11.10, qui inclut une mise à niveau récente, mais ce problème persiste.
MISE À JOUR 3 : Comme demandé, j'ai démarré avec --debug
. La sortie de cat /var/log/syslog | grep init
est trop longue à placer dans la question, mais vous la visualisez ici .
UPDATE 4 : Plus de journaux, cette fois la configuration upstart est incluse en haut. Exécuter 1 et exécuter 2 .
cat /var/log/syslog | grep init
après l'activation de la journalisation de démarrage pour Upstart en suivant les instructions de la rubrique Débogage UpstartRéponses:
Je recommanderais d'augmenter la verbosité du travail, par exemple en utilisant des entrées pré-début / post-début.
Plus d'informations sur http://upstart.ubuntu.com/cookbook/
Regardez aussi http://upstart.ubuntu.com/wiki/Debugging
la source
Ce qui se passe probablement ici, c'est que pms commence avant que vos adaptateurs réseau ne soient disponibles et probablement avant même l'adaptateur de bouclage (lo). En supposant que nous parlions du serveur multimédia PS3, il s’agisse d’un service en réseau qui n’aime probablement pas le démarrage sans interfaces disponibles.
Essayez de changer votre critère de départ pour:
Cela signifie que vous devez démarrer après la mise en place d’une interface réseau "réelle". Cependant, ce n'est peut-être pas idéal. Si eth0 est l'interface suivante, PMS démarre, mais vous voulez vraiment que PMS utilise wlan0, cela ne fonctionnera pas. Le service va démarrer mais il n'a peut-être pas été en mesure de choisir l'interface sur laquelle vous souhaitez l'écouter. En supposant que vous connaissiez l'interface sur laquelle vous allez diffuser et qu'elle ne changera pas, je la codifierais en dur dans le travail, par exemple:
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 tâches 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 me réfère à utiliser à la/etc/network/interfaces
place de NetworkManager. Cela ne signifie pas statique dans le sens d'une adresse IP statique par rapport à DHCP.]la source
lo
eteth0
mais je votre deuxième suggestion:start on filesystem and net-device-up IFACE=eth0
. Toujours pas après un redémarrage. Je viens de remarquer quelque chose dans le journal PMS qui peut être une piste. Je vais enquêter et revenir ...sleep 10
- ou plus - dans un "script de pré-démarrage" avant d'exécuter le script shell.En examinant votre syslog, le processus pms commence sans erreur, mais peu de temps après, son objectif est modifié, ce qui signifie qu'il est tué.
Ceci est un peu étrange car vous avez ajouté la clause repsawn, elle devrait donc recommencer après avoir été arrêtée, mais ce n’est jamais le cas. Je suppose donc que vous avez supprimé la clause de réapparition.
Entre le démarrage et l'arrêt du service pms, seuls 2 services sont démarrés avec ufw et l'interface réseau (eth0), et 1 est lancé avec udev-fallback-graphics.
Il semble que votre processus pms soit démarré en parallèle. Malheureusement, la documentation récente est un peu floue sur les différences exactes entre
start on ...
vanilla etstart on starting ...
andstart on started ...
.Essayez de changer votre strophe de démarrage à
ou juste aussi
La sortie du journal est un peu étrange car l'événement net-device-up survient beaucoup plus tard, mais pms démarre avant.
Cela devrait faire en sorte que votre processus commence une seule fois tout en réseau mis en place est terminée à savoir le travail n'a pas seulement commencé mais fini.
De plus, n'approuvez pas complètement la sortie du journal. Au début du processus de démarrage, la journalisation de la sortie dans un fichier ne fonctionne pas toujours. Voir la réponse dans Debugging Upstart
la source
Géré pour résoudre un problème similaire en utilisant start on runlevel à la place:
la source
J'ai eu le même problème et je l'ai finalement résolu simplement avec:
start on runlevel [2345]
sans
net-device-up
oustarted networking
trucCeci est le script complet de départ, et cela fonctionne parfaitement:
la source
Je suis tombé sur
chkconfig
lors de ma formation RHCSA / CE:Vous pouvez consulter sa page de manuel Oneiric pour plus de détails sur ses fonctionnalités.
la source
J'ai trouvé une solution pour cela mais je ne la comprends pas. Si je déplace le syndrome prémenstruel avec
/home/administrator
et/bin/pms
root en tant que propriétaire, tout fonctionne correctement.Si je le laisse sous
/home/administrator/
mais que root est le propriétaire de tout, sauf le/home/administrator/
répertoire lui-même, cela ne fonctionne toujours pas.Si je configure l'administrateur en tant que propriétaire de tout et modifie la partie pertinente de mon script en:
Cela ne fonctionne toujours pas.
Je suppose que pour le moment je vais créer un
/home/root/
répertoire et y déplacer tout, même si j'aimerais bien comprendre tout cela.la source
chkconfig
n'a pas marché non plus? Avez-vous essayé de donner le répertoirePMS.sh
était à root? Si seule votre solution fonctionne, accédez à la page Launchpad de Upstart et contactez directement les développeurs..sh
il suffit de tout conserver et d'éditer le script pour qu'il pointe vers ce répertoire (ou même de changer de répertoire?).J'ai eu un problème similaire "pas de départ" 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 standard d'ubuntu (.Private).
start on local-filesystems
événement est (probablement) émis avant la fin du processus de déchiffrement.la source
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
etstart on network-interface-up INTERFACE=eth0
ne travaillent pas, maisstart on started network-interface INTERFACE=eth0
Est-ce que.Merci à http://os4.org/wiki/upstart.html pour nous avoir signalé que le réseau d’emploi était
initctl list
toujours arrêté.la source
Dans mon cas, le service upstart dépendait du script situé dans dossier synchronisé vagrant . Résolu le problème en utilisant la ligne suivante:
Plus d'infos: http://razius.com/articles/launching-services-after-vagrant-mount/
la source
Semblable à @xuhcc, je suis venu ici pour savoir pourquoi mon script Vagrant Upstart ne fonctionnait pas. Ce qui suit est censé fonctionner:
Mais pas dans certaines versions en raison du bogue suivant.
https://github.com/mitchellh/vagrant/issues/6074
La solution de contournement indiquée dans le rapport a parfaitement fonctionné pour moi:
A bien fonctionné pour moi
la source
cela a fonctionné pour moi (j'ai besoin de démarrer le service après iface up):
la source