Il y a quelques questions et réponses ici concernant l'alerte lorsqu'un processus se termine / se termine ( 1 , 2 ) - mais ceux-ci supposent tous que l'utilisateur a émis ledit processus lui-même, et peut donc l'écrire avec une alerte intégrée dans le régir le script ou diriger le processus vers une sorte d'alerte.
Ma situation est que je voudrais être alerté de l'achèvement / sortie d'un processus que mon utilisateur n'initialise pas. À savoir, je traite en masse des fichiers vidéo massifs sur un serveur Ubuntu 12.04 LTS. Certaines opérations sur ces fichiers prennent très longtemps, donc je voudrais une sorte d'alerte (e-mail serait génial) quand un spécifique se termine. Ils prennent tellement de temps, que faire cela sur une base ponctuelle, manuellement, basée sur PIT serait parfaitement bien.
Pour fournir plus d'informations - disons que je traite un fichier particulièrement volumineux, et je vois qu'il a progressé vers un script FFMPEG, le processus lui-même étant un script python (qui est assez complexe, et non écrit par moi-même, et quelque chose Je ne souhaite pas modifier - bien que ce soit la première approche logique). J'imagine émettre une commande ou un script avec le PID dudit script python en cours d'exécution comme argument, et lorsque le processus avec ce PID n'est plus en cours d'exécution, le script d'alerte fait son travail.
Des idées?
Réponses:
J'ai écrit process_watcher.py
Actuellement, le corps de l'e-mail ressemble à ceci:
Créez un problème GitHub si vous avez besoin de l'améliorer.
la source
Quelque chose comme ça?
Remplacez
$pid
par l'ID de processus etecho "finished"
par tout ce que vous voulez faire à la fin du processus.Par exemple:
la source
kill -0
signaleNo such process
les pids inexistants et lesOperation not permitted
pids appartenant à un autre utilisateur, donc peut-être que l'interprétation du message d'erreur devrait éviter la nécessité desudo
echo -en "\007 \007 \007"
, ce qui émettra une «cloche» de terminal. Que cela se traduise par un son réellement audible dépend de votre terminal et de votre matériel (mais généralement).J'utilise
&&
pour exécuter une deuxième commande lorsque la première est terminée avec succès. Voici quelques exemples:Supprimez un gros dossier et un bip:
Compilez un noyau et envoyez un email:
Est-ce un bon moyen de résoudre votre problème? Dans un autre cas, vous pouvez ajouter une
||
et une troisième commande en cas d'échec.De plus, un script shell peut recevoir l' état de sortie (
$?
) de votre commande, et avecif/else
et boucles vous pouvez faire ce que vous voulez.la source
Si vous n'avez pas le pid, cela s'exécutera jusqu'à ce que toutes les instances de ffmpeg soient terminées:
la source
Si vous ne souhaitez pas utiliser une option d'interrogation ou un script externe et que vous avez déjà démarré le processus de longue durée, vous pouvez le suspendre avec CTRL + Z (envoie un signal SIGTSTP), puis le reprendre avec
fg
(déplace le processus vers au premier plan).Par exemple:
la source
J'ai créé une application qui enverra une notification à votre téléphone Android à la fin d'un processus afin que vous n'ayez pas à être connecté à votre ordinateur.
Installez, puis ajoutez
;notifier.sh
à la fin de votre commande.Par exemple, si votre commande était
make install
, vous feriez votre commande:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
la source