web-dev-qa-db-fra.com

Exécuter des tâches à court terme via Upstart

OS: Ubuntu 12.04

Tâche: exécuter le script dans certaines conditions de démarrage/d'arrêt. Aucun service/démon de longue durée n'est lancé, seulement des actions à court terme.

Script par défaut test.conf:

description     "test script"

start on local-filesystems or runlevel [2345]
stop on runlevel [!2345]

task

pre-start exec /full/path/to/script.sh start
pre-stop exec /full/path/to/script.sh stop

Problèmes:

  1. L'exécution du test de démarrage ne se termine jamais. Si je maintiens la touche Ctrl-C en attente, les appels de statut suivants indiquent que le service est en cours d'exécution.
  2. 'stop test' n'entraîne pas du tout une strophe 'pré-stop'.

La tâche initiale peut-elle être résolue à l’aide de scripts d’arrêt?

Merci.

Mise à jour. "Le fait que votre script.sh ait à la fois des actions de démarrage et d'arrêt, ce qui suggère un démon de longue durée"

Aucune contradiction. Il existe des actions de démarrage et de nettoyage, sans processus intermédiaires de longue durée.

Lorsque j'ajoute la strophe 'exec', c'est-à-dire.

exec /full/path/to/script.sh idle

le résultat est le suivant:

$ start test
test stop/waiting

$ status test
test stop/waiting

$ stop test
stop: Unknown instance:

Correction: Le script mentionné dans les strophes est exécuté avec les paramètres "start" et "inactif", mais pas avec "stop".

3
Konstantin Boyandin

Votre fichier de configuration par défaut ne comporte pas de section exec ou script et vous semblez vouloir commencer uniquement avec la commande de pré-démarrage, ce qui n’est pas correct. Selon la documentation de départ ( http://upstart.ubuntu.com/getting-started.html ):

Tous les fichiers de travail doivent comporter une strophe exec ou script. Ceci spécifie ce qui sera exécuté pour le travail.

Du code Shell supplémentaire peut être donné pour être exécuté avant ou après le binaire ou le script spécifié avec exec ou le script. On ne s'attend pas à ce qu'ils commencent le processus, en fait, ils ne peuvent pas. Ils sont destinés à la préparation de l'environnement et au nettoyage ultérieur.

De plus, ce que votre tâche d'origine demande ("Aucun service/démon de longue durée n'est lancé, seules des actions à court terme.") Semble contredire le fait que votre script.sh possède à la fois start et stop _ actions qui fait suggérer un démon de longue durée.

description     "test script"

start on local-filesystems or runlevel [2345]
stop on runlevel [!2345]

task

# Assuming script.sh start starts, performs a process, and then exits,
# this should work
exec /full/path/to/script.sh start

# No need for a pre-stop

Le document que j'ai lié à l'ouvrage est supposé être obsolète, vous pouvez aussi consulter http://upstart.ubuntu.com/cookbook/ qui est une bonne référence et contient des exemples utiles, je vous suggère donc lisez-le si les choses ne sont pas encore claires.

2
roadmr