11
votes

Linux: Comment faire la queue des travaux en arrière-plan?

Voici la fonctionnalité que je recherche (et je n'ai pas encore trouvé):

J'ai x processus que je veux courir séquentiellement. Certains d'entre eux pourraient être assez fastidieux.

Je veux que ces processus fonctionnent dans le fond de ma coquille.

Je sais à propos de NOHUP, mais cela ne semble pas fonctionner parfaitement ... en supposant que Job1 est un travail de consommation de temps, si je suis Ctrl + C de la ligne vide que je reçois après avoir fait Nohup Job1 && Job2 && Job3 & , alors Job2 et Job3 ne s'exécuteront pas, et Job1 pourrait ou pourrait ne pas fonctionner en fonction de la durée de la course NOHUP.

Y a-t-il un moyen d'obtenir la fonctionnalité que je veux? Je suis ssh'ed dans un serveur Linux. Pour des points bonus, j'aimerais que j'aimerais que les emplois que j'ai mis en file d'attente continueraient à courir, même si je fermais la fermeture de ma connexion.

Merci pour votre aide.

Edit: un petit addenda à la question: Si j'ai un script shell avec trois déclarations Execes

experte grossissement EXECPELTHING EXEC SPLINGTHING

sera-t-il certainement séquentiel? Et existe-t-il un moyen d'envelopper ces toutes dans une ligne d'exécution pour obtenir la fonctionnalité équivalente?

Ie EXEC EXEC BIFTHING & ASPELTHINS & ASPELTHING OR && OU SOMESUCH


0 commentaires

7 Réponses :


-2
votes

Après que votre commande ait A &

pour EXMAPLE exécutant un exécutable nommé FOO: xxx

et il continuera également à fonctionner même si vous fermez la connexion SSH. < / p>


1 commentaires

Ceci est une erreur. Le travail sera annulé lorsque vous fermez la session SSH



13
votes

Utilisez écran .

  1. ssh au serveur
  2. Écran
  3. Lancez vos programmes: job1; job2; job3 - séparé avec des points-virgules, ils vont courir séquentiellement
  4. Détachez de l'écran: Ctrl-A , d
  5. Déconnexion du serveur

    (plus tard)

    1. ssh au serveur
    2. exécuté écran -r
    3. Et vous êtes dans votre coquille avec votre queue d'emploi en cours d'exécution ...

1 commentaires

Eh bien, c'est mon "je ne savais pas que tu pouvais faire ça!" pour la journée!



0
votes

Le mécanisme de base pour l'ampleur d'un travail à partir de la coquille est xxx

afin que vous puissiez faire un script de shell simple qui le fait séquentiellement pour plusieurs d'entre eux, bien que à ce moment-là que je considérerais Plongez dans un langage de script comme Perl ou Python et écrire un script simple pour fourcher ces processus. Si votre script fourche-lui-même comme première étape et que tout son travail dans la fourchette, il vous retournera immédiatement le contrôle sur la coquille et continuera à courir même si vous vous déconnectez.


0 commentaires

0
votes

à l'arrière-plan qu'il le détache de la coque (tâches vient d'être fondée sur & sont soumis à des jeux de shell), utilisez

setsid foo


0 commentaires

3
votes

Je suis d'accord que écran code> est un outil très pratique. Il y a d'autres outils de ligne de commande Enqueue code> - qui permet d'enroquer d'emplois supplémentaires Au besoin, c'est-à-dire que même lorsque vous aviez déjà commencé l'un des emplois, vous pouvez en ajouter un autre lorsque le premier est déjà en cours d'exécution.

Ici's Echantillon de Enqueue Code> README: P>

$ enqueue add mv /disk1/file1 /disk2/file1
$ enqueue add mv /disk1/file2 /disk2/file2
$ enqueue add beep
$ enqueue list


0 commentaires

8
votes

Alternativement, si vous voulez un peu plus de contrôle de votre file d'attente, par exemple. La possibilité de répertorier et de modifier les entrées, de vérifier Spouleur de tâches . Il est disponible dans les référentiels d'univers de Ubuntu 12.10 comme l'emballage Task-Spooler .


0 commentaires

1
votes

Un peu plus d'informations:

Si vous séparez vos travaux avec && cela équivaut à l'opérateur && et opérateur dans un langage de programmation, tel que dans une déclaration IF. Si Job 1 retourne avec une erreur, Job 2 ne fonctionne pas, etc. C'est ce qu'on appelle "court-circuit". Si vous séparez les travaux avec; Au lieu de cela, ils seront tous exécutés indépendamment du code de retour.

Si vous terminez la ligne avec et ce sera l'arrière-plan. Si vous oubliez, vous pouvez appuyer sur Control + Z pour mettre en pause la commande et vous donner une invite, puis la commande "BG" les arrière-plan.

Si vous fermez votre session SSH, il finira probablement les commandes car elles sont attachées à votre coquille (au moins dans la plupart des implémentations de Bash). Si vous voulez qu'il continue après votre déconnexion, utilisez la commande "désavotée".


0 commentaires