Le script Upstart ne démarre pas

33

Ubuntu 10.04

J'ai créé ce script ( /etc/init/pure-ftpd.conf ):

# pure-ftpd - FTP server

description "Pure-FTPd server"

start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid
console output

pre-start script
    test -x /usr/local/sbin/pure-ftpd || { stop; exit 0; }
end script

exec /usr/local/sbin/pure-ftpd --maxclientsnumber 2 --maxclientsperip 10 --prohibitdotfileswrite --prohibitdotfilesread --noanonymous --chrooteveryone --dontresolve --nochmod --pidfile /var/run/pure-ftpd.pid

Mais...

# start pure-ftpd
start: Unknown job: pure-ftpd

et

# service pure-ftpd start
start: Unknown job: pure-ftpd


Quel est le problème?
Est-il nécessaire de faire quelque chose de plus?
Est-il nécessaire de créer un script dans /etc/init.d également?

Juan Simón
la source
J'ai rencontré le même problème. Veuillez essayer la commande initctl sur la console. Pour entrer en session de console, appuyez sur Ctrl + ALT + F1 et connectez-vous. (Je ne comprends pas pourquoi, mais j'ai

Réponses:

26

Cela signifie généralement que vous avez une erreur dans le .conffichier - par exemple, je ne suis pas sûr que la pidstrophe soit prise en charge dans 10.04, stopne peut pas être utilisée dans le script, etc.

J'essayais de démarrer le fichier à partir de zéro (avec seulement start, stopetc.), puis de le construire lentement en ajoutant de plus en plus de lignes et en le testant via start pure-ftpd.

Par exemple:

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5

# start pure-ftpd
pure-ftpd start/running

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid

# start pure-ftpd
start: Unknown job: pure-ftpd
organiser
la source
Les informations sur le wiki sont très obsolètes ( upstart.ubuntu.com/wiki ). D'un autre côté, la version upstart de Lucid est 0.6.5-8 et le fichier pid devrait être pris en charge: upstart.ubuntu.com/wiki/…
Juan Simón
1
Autant que je sache, la pidstrophe a été supprimée depuis la version 0.5.0 2008-08-12 "One of those deaf-mutes". Ne l'utilisez pas.
arranger
Quelqu'un sait où se trouve la documentation mise à jour?
Juan Simón
46

Vous pouvez également exécuter init-checkconfpour vérifier la syntaxe

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
Stefano Gargiulo
la source
1
La commande n'existe pas dans 10.04, mais dans 12.04.
Mark Stosberg
6
Mais cela ne fonctionne pas (encore) sur un serveur sans tête Ubuntu 12.04. Voir bugs.launchpad.net/upstart/+bug/881885
FvD
1
Trouvé le problème tout de suite! - Devrait être intégré à la startcommande pour vous donner un message d'erreur plus informatif ...
AT
26

Tout d’abord, vous pouvez vérifier que votre travail est connu pour sa mise en service:

sudo initctl list | grep your_job_name

... où your_job_nameest le nom de votre script de mise à jour moins l' .confextension.

Si ce n'est pas le cas, vous pouvez essayer de recharger la configuration puis de revérifier:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Puis réessayez pour commencer votre travail:

sudo start your_job_name

Si vous ne vous connectez pas /var/log/daemon.logou /var/log/syslogavant, vous pourriez en avoir maintenant.

Mark Stosberg
la source
1
Et que se passe-t-il si cela montre que le travail n’est pas connu pour son démarrage, même si la syntaxe est correcte et qu’il réside dans / etc / init?
FvD
1
Avez-vous essayé "sudo initctl reload-configuration" comme suggéré? Avez-vous vérifié les autorisations, les journaux, les documents?
Mark Stosberg
Je l'ai fait et l'ai refait après avoir lu votre commentaire. Même s'est assuré que l'utilisateur était un utilisateur système (useradd -r). Peut-être y a-t-il peut-être quelque chose d'autre qui ne va pas - sans rapport avec le programme d'installation avancé - alors j'ai posté un problème aux développeurs du service que je tente de démarrer (le serveur brillant que j'essaye de démarrer au démarrage).
FvD
1
Et ce sont les autorisations après tout! bien que tout ait semblé clair lors de l’énumération du répertoire, ce n’est qu’après qu’un pilote chmod 644 a pris le script. Merci encore.
FvD
1
Rappelez-vous que votre_job_name est sans la fin .conf du fichier. Il m'a fallu une heure pour le découvrir.
Marcel
6

La référence la plus pertinente pour la syntaxe du fichier de travail sera disponible lorsque vous exécuterez la commande:

man 5 init

sur votre système. Pour Ubuntu 10.04, comme vous l'avez constaté dans la réponse précédente, la syntaxe du fichier pid est incorrecte.

Chaque fois que vous obtenez cette erreur "travail inconnu", c'est une bonne idée de vérifier les journaux (avant 11.04, /var/log/daemon.log, 11.04 et plus, tout se trouve dans / var / log / syslog).

Vous pouvez voir une erreur comme celle-ci:

init: /etc/init/test.conf:2: Unknown stanza
SpamapS
la source
3

Quoi qu'il en soit, je suis ici parce que j'ai eu le même problème, mais ma syntaxe était correcte à 100%.

Après un certain débogage, j'ai découvert un autre problème pouvant causer l' erreur " Travail inconnu" :

upstarts utilise inotify pour surveiller les modifications de fichiers .conf et les tâches d’installation automatique, c’est très cool (pour cela, vous n’avez pas besoin de quelque chose comme update.rc avec upstart!), mais cela peut ne pas être parfait si vous (comme moi dans ce cas) utilisez programme FTP / SCP permettant de télécharger et d’éditer des configurations sur des serveurs distants, le travail peut être désinstallé en mode silencieux par l’arrêté lors de la modification de fichier de cette manière.

simplement réparer ça (ça m'a sauvé)

touch /etc/init/*

il générera des événements inotify pour actualiser toutes les communications parvenues.

Stefano Gargiulo
la source
2

J'ai eu le même problème dans mes conteneurs Ubuntu 14.04 Docker. Il s'avère que l'image Ubuntu 14.04 (sinon d'autres) de Docker ne prend pas en charge Upstart de la même manière qu'une machine virtuelle complète.

Pour répondre à cette question, pourquoi le service ne démarre pas, c'est parce qu'initctl n'est pas un programme Upstart réel: il est mappé sur / bin / true.

Pour vérifier, exécutez ce qui suit sur un conteneur Ubuntu 14.04 Docker contre Vagrant et contre un droplet DigitalOcean

$ ls -al /sbin/initctl

Vous verrez que initctl n’est pas le même dans Docker et les autres.

Un lien qui peut approfondir votre compréhension. Https://github.com/docker/docker/issues/1024

Johnathan J.
la source
2
Couru dans le même problème avec docker: en résumé et pour résumer, docker n'exécute qu'un processus à la fois, de sorte qu'il ne peut pas être lancé et autre chose. Pour être sûr de redémarrer le service si / quand il meurt, j’ai fini par utiliser supervisord. PS: vous ne devez pas exécuter plusieurs services dans un conteneur: l’intérêt de l’utilisation des conteneurs est de créer des micro-services
Créez
1
Je viens de lire cet article et cela donne de très bons conseils sur la manière de séparer les préoccupations: blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker qui est probablement le même meilleure stratégie à utiliser qu'à utiliser superviseur
MrE