web-dev-qa-db-fra.com

Le script Upstart ne démarre pas

Ubuntu 10.04

J'ai créé ce script de démarrage (/ 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 également nécessaire de créer un script dans /etc/init.d?

33
Juan Simón

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

J'essayais de démarrer le fichier à partir de zéro (avec uniquement start, stop etc), puis de le construire lentement en ajoutant de plus en plus de lignes et en le testant avec 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
25
arrange

Vous pouvez également exécuter init-checkconf pour vérifier la syntaxe.

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
46
Stefano Gargiulo

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_name est le nom de votre script de mise à jour moins l'extension .conf.

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 êtes pas connecté /var/log/daemon.log ou /var/log/syslog auparavant, vous en avez peut-être maintenant.

26
Mark Stosberg

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 de "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
6
SpamapS

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 qui peut causer cette erreur "Job inconnu" :

pstarts utilise inotify pour surveiller les modifications de fichiers .conf et les tâches d'installation automatique, c'est très pratique (pour cela, vous n'avez pas besoin de quelque chose comme update.rc avec upstart!) mais peut ne pas être parfait si vous (comme moi dans ce cas) utilisez un programme d'interface graphique FTP/SCP pour charger et modifier des configurations sur des serveurs distants, le travail peut être désinstallé silencieusement par upstart quand vous éditez le fichier de cette manière.

pour réparer il suffit de faire cela (cela m'a sauvé)

touch /etc/init/*

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

3
Stefano Gargiulo

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 pourrait approfondir votre compréhension .. https://github.com/docker/docker/issues/1024

2
Johnathan J.