Je suis un scientifique en informatique et je fais beaucoup de calculs longs sous Linux. Plus précisément, j'effectue des simulations de dynamique moléculaire (MD) à l'aide du progiciel GROMACS. Ces simulations peuvent prendre des jours, voire des semaines, sur (par exemple) 8 à 24 cœurs. J'ai accès à plusieurs nœuds d'un cluster, ce qui signifie qu'à tout moment, j'exécute environ 4 ou 5 tâches (chacune sur un nœud différent et sur 8 à 24 cœurs).
Le problème est que la simulation prend un temps variable. J'aime que tous les nœuds travaillent sur des simulations 24 heures sur 24, mais pour démarrer une nouvelle simulation, je dois me connecter avec un terminal et effectuer un travail manuel. Mais j'oublie toujours combien de temps il reste dans une simulation, je finis donc toujours par les vérifier constamment.
Est-il possible de recevoir un courrier électronique à la fin d'un processus Linux? Pourrait-il y avoir un programme Linux qui fait cela? De cette façon, je saurais quand ouvrir une session avec un terminal et préparer la prochaine simulation.
J'utilise Ubuntu Linux. Merci pour votre temps.
Réponses:
Les travaux soumis au
at
démon vous enverront toute sortie de stderr et stdout à la fin. Il peut également être configuré pour envoyer du courrier même si le travail n'a pas de sortie. Il présente également l'avantage de fonctionner sans terminal de contrôle, vous évitant ainsi de vous inquiéter des effets de la fermeture de votre terminal sur votre travail.exemple:
Une fois ce travail terminé, l'utilisateur qui l'a soumis recevra un courrier électronique. S'il y a une sortie, vous le recevrez. Vous pouvez modifier le destinataire de l'e-mail en modifiant la
LOGNAME
variable d'environnement.at
dispose d'un mode de traitement par lots dans lequel vous pouvez mettre en file d'attente les travaux à exécuter lorsque le système n'est pas occupé. Ce n'est pas un très bon système de mise en file d'attente lorsque plusieurs utilisateurs se font concurrence pour obtenir des ressources, mais néanmoins, si vous souhaitez exécuter des tâches avec ce dernier:Par défaut, les tâches ne démarreront que si la charge du système est inférieure à 1,5, mais cette charge peut être ajustée (et avec 24 cœurs, je dirais que vous devriez). Ils peuvent fonctionner en parallèle s’ils ne dépassent pas loadavg au-dessus de la limite de charge (1,5 fois la valeur par défaut), ou s’ils dépassent individuellement loadavg au-delà de 1,5, ils fonctionneront en série.
Vous pouvez afficher la file d’attente avec
atq
et supprimer des tâches avecatrm
Répondre aux dépendances:
atd
démon (ps -ef|grep atd
)atd
(non refusés par/etc/at.deny
//etc/at.allow
configurations)sendmail
MTA fonctionnelLa plupart des systèmes ne rencontrent aucun problème avec ces exigences, mais cela vaut la peine de vérifier.
la source
Oui, il y a
Où -s "texte" est le sujet, l'écho donne au courrier du texte à vous envoyer.
la source
mail
commande nécessite que le MTA local soit configuré correctement. C'est la solution facile et simple.mail
pour vous envoyer le résultat de la commande:{ command; echo Done; } | mail -s "subject" [email protected]
screen
outmux
, mais il peut être délicat de laisser un terminal ouvert quelque part sans jours. La solutionat
pour la gestion des tâches s’occuperait également de ce problème.&
à la fin de la commande pour qu'elle s'exécute dans l'arrière-plan.sleep 30 && echo "Process done" | mail -s "Process done" [email protected] &
nohup
pour les dissocier, mais vous perdez également la possibilité de continuer à le contrôler depuis le shell. C'est en partie à quoi çatmux
sert. Il sépare les processus en cours de votre session de terminal activement connectée et visualisée tout en vous permettant d'interagir normalement avec eux.Je recommanderais de définir un script python pour envoyer un courrier électronique. Il est très facile d'écrire et de configurer les serveurs de messagerie appropriés pour le service que vous utilisez. Ils ressemblent à ceci:
Utilisez ceci conjointement avec l’opérateur de pipe suggéré dans les autres réponses.
Une autre excellente solution que j'ai trouvée à ce problème consiste à utiliser Pushover . Pushover - "Pushover facilite l'envoi de notifications en temps réel à vos appareils Android et iOS." J'ai mis en place un script simple qui permettait à l'API facile d'envoyer un message à mon téléphone une fois la construction terminée.
la source
Vous pouvez également utiliser la
trap
commande pour envoyer un courrier à la sortie du processus, ou lors de l'interruption, du raccrochement ou de la fin du processus. Voici le code que vous devez placer en haut de votre script.Arun
la source
J'ai écrit process_watcher.py
Actuellement, le corps de l'e-mail ressemble à:
Créez un problème avec GitHub si vous avez besoin d’être amélioré.
la source
fg ‹PID›; mail -s Completed [email protected] <<< 'Message here'
.J'ai un script maison qui fonctionne pour moi. Usage:
Il enverra un courrier électronique avec des informations significatives sur le sujet et sur la sortie du processus dans le corps.
Les instructions d’installation se trouvent sur la page principale du référentiel GitHub - actuellement, un lien symbolique est créé pour tous les scripts
~/bin
.la source
En supposant que votre programme est déjà lancé, utilisez bash + pgrep pour le regarder.
la source
Il y a bien longtemps, j'ai créé cet alias (en csh, je l'utilise maintenant en tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Il exige que
Mail
soit installé et fonctionne sur votre système, mais a l'avantage que votre commande fonctionne exactement comme il de la ligne de commande (y compris les alias, tilde extensions, etc) - lorsque vous exécutez un travail en utilisantat
oucron
il fonctionne sous un défaut environnement qui peut être suffisamment différent pour que votre script échoue ou produise un résultat inhabituel (cela mordcron
souvent à cela)la source