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?
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
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
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.
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
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.
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