Méthode correcte pour installer un service personnalisé de démarrage

51

J'utilise upstart pour les services sur mes serveurs. Écrire un fichier de configuration et le placer dans /etc/initest facile, mais cela ne semble pas s’installer complètement. D'une part, le service --status-allne répertorie pas mon nouveau service. J'ai vérifié et si je fais un lien /etc/init.dvers /lib/init/ubstart-jobil apparaîtra dans le statut. Mais faire cela manuellement me fait penser que je ne le fais pas bien, et il se peut que d’autres étapes de configuration ne soient pas effectuées.

Quelle est la bonne façon d'installer un service upstart tel qu'il soit correctement enregistré dans tous les outils traitant des services?

edA-qa mort-ora-y
la source
2
Ce gars a répondu une de mes questions en utilisant le service arriviste et a donné une explication détaillée, il pourrait indiquer une étape qui aurait pu manquer askubuntu.com/a/278128/75967
Meer Borg
1
Vouliez-vous dire /lib/init/upstart-job?
Dalore

Réponses:

46

Lorsque vous copiez pour la première fois un nouveau fichier conf dans le dossier / etc / init, vous devez appeler:

initctl reload-configuration

Par ceci votre upstart devrait être correctement enregistré.

tombert
la source
8
Donc, cela configure correctement le travail (c.-à start-d. Le stoptravail), mais cela ne le rend pas visible. Je devais encore l'ajouter manuellement /etc/init.d/pour que cela se produise.
James McMahon
1
@JamesMcMahon Vous devez exécuter la initctl listcommande avec sudo: sudo initctl list. De cette façon, vous verrez la liste complète des services.
Shahriyar Imanov
Pourquoi le sudo, il ne semble pas changer la sortie de la liste initctl du tout.
LovesTha
@JamesMcMahon, I still had to manually add it to /etc/init.d. Il fallait encore ajouter quoi? Cela signifie que, en plus d'un X.conffichier ajouté à /etc/init, il est également nécessaire d'ajouter un fichier à /etc/init.d?
Kevin Meredith
@ KevinMeredith, désolé, je n'ai pas été plus détaillé. Cela fait 2 ans et je ne me souviens pas des détails. Si vous examinez une documentation init.d, elle devrait être claire, espérons-le.
James McMahon
18

Commander le manuel d'entretien:

service --status-all exécute tous les scripts d'initialisation, dans l'ordre alphabétique, avec la commande status. Cette option n’appelle que l’état pour les travaux sysvinit. Les travaux en amont peuvent être interrogés de la même manière avec initctl list.

(emphase ajoutée)

C'est pourquoi l'ajouter à /etc/init.d (où se trouvent les travaux sysvinit) a permis ce travail. Donc, essayez plutôt de lancer initctl list :).

Kyle
la source
That's why adding it Ajout de quoi? En plus du my_service.conffichier dans /etc/init, il est également nécessaire d'avoir un /etc/init.dfichier?
Kevin Meredith
Ne fonctionne pas avec Ubuntu 16.04.4 LTS \\ $ initctl list initctl: le nom "com.ubuntu.Upstart" n'existe pas $ sudo initctl list initctl: Impossible de se connecter à Upstart: Impossible de se connecter à socket / com / ubuntu / upstart: Connexion refusée
9
13

Pour les services SysV

Assurez-vous de suivre les étapes suivantes lors de l'ajout / création d'un nouveau service dans Ubuntu.

  1. Créez le fichier de service dans /etc/init.d/<service name>
  2. chmod 700 /etc/init.d/<service name>
  3. update-rc.d <service name> defaults
  4. update-rc.d <service name> enable

Maintenant, voyez-vous servir dans

service --status-all
Suyash Jain
la source
15
votre réponse concerne sysv et non pas upstart. vous voudrez peut-être le supprimer.
jcomeau_ictx
3
C'est une réponse utile en effet.
ATorras
bien que cela concerne un autre service, il est en effet utile
wuppi
1

J'ai constaté qu'une erreur dans le fichier .conf peut rendre le travail non reconnaissable par initctl. par exemple, avoir une setuidligne dans la version 1.3 ou antérieure d'Upstart.

jcomeau_ictx
la source
1

Bien que la réponse choisie actuellement soit correcte pour obtenir le nouveau service ajouté à upstart, elle n'est pas particulièrement utile pour savoir POURQUOI une configuration dans / etc / init / ne parvient pas à se charger - la pièce manquante utilise d'abord init-checkconf pour s'assurer que votre configuration est valide, puis en utilisant reload-configuration:

####Test the new config - resolving any issues before continuing:
ERROR: File /etc/init/test.conf: syntax invalid:
test.conf:35: Unterminated quoted string

####then fix and recheck:
# init-checkconf /etc/init/test.conf
File /etc/init/test.conf: syntax ok

####then reload:
# initctl reload-configuration

#### and start:
# start test
Jeff Parsons
la source