Jest tu kilka pytań i odpowiedzi dotyczących powiadamiania o zakończeniu / zakończeniu procesu ( 1 , 2 ) - ale wszystkie zakładają, że użytkownik sam wydał wspomniany proces, a zatem mogą go skrypty za pomocą alertu wbudowanego w skrypt zarządzający lub potokuj proces do jakiegoś rodzaju alertu.
Moja sytuacja polega na tym, że chcę zostać powiadomiony o zakończeniu / zakończeniu procesu, którego mój użytkownik nie inicjuje. Mianowicie przetwarzam masowo pliki wideo na serwerze Ubuntu 12.04 LTS. Niektóre operacje na tych plikach zajmują bardzo dużo czasu, dlatego chciałbym jakiś alert (e-mail byłby świetny) po zakończeniu określonego. Trwają tak długo, że zrobienie tego jednorazowo, ręcznie, w oparciu o PIT, byłoby całkowicie w porządku.
Aby dostarczyć więcej informacji - załóżmy, że przetwarzam szczególnie duży plik, i widzę, że przeszedł on do skryptu FFMPEG, sam proces jest skryptem w języku Python (który jest dość złożony i nie jest napisany przeze mnie, i coś takiego Nie chcę modyfikować - choć byłoby to pierwsze logiczne podejście). Wyobrażam sobie wydanie polecenia lub skryptu z PID wspomnianego uruchomionego skryptu python jako argumentu, a kiedy proces z tym PID nie jest już uruchomiony, skrypt alertu robi swoje.
Jakieś pomysły?
Odpowiedzi:
Napisałem process_watcher.py
Obecnie treść wiadomości e-mail wygląda następująco:
Rozwiąż problem GitHub, jeśli potrzebujesz ulepszeń.
źródło
Coś takiego?
Zamień
$pid
na identyfikator procesu iecho "finished"
cokolwiek chcesz zrobić po zakończeniu procesu.Na przykład:
źródło
kill -0
raportyNo such process
o nieistniejących pidach iOperation not permitted
pidach należących do innego użytkownika, więc być może interpretacja komunikatu o błędzie powinna wyeliminować potrzebęsudo
echo -en "\007 \007 \007"
, co wyda terminalowy „dzwonek”. To, czy przekłada się to na rzeczywisty słyszalny dźwięk, zależy od terminala i sprzętu (ale zazwyczaj tak jest).Używam
&&
do wykonania drugiego polecenia, gdy pierwsze jest pomyślnie zakończone. Oto kilka przykładów:Usuń duży folder i wyemituj sygnał dźwiękowy:
Skompiluj jądro i wyślij wiadomość e-mail:
Czy to dobry sposób na rozwiązanie twojego problemu? W innym przypadku możesz dodać
||
i trzecie polecenie w przypadku awarii.Ponadto skrypt powłoki może otrzymać status wyjścia (
$?
) polecenia, a za pomocąif/else
i pętli możesz robić, co chcesz.źródło
Jeśli nie masz pid, będzie on działał do momentu zakończenia wszystkich instancji ffmpeg:
źródło
Jeśli nie chcesz korzystać z opcji odpytywania ani zewnętrznego skryptu, a już rozpocząłeś długo działający proces, możesz go zawiesić za pomocą CTRL + Z (wysyła sygnał SIGTSTP), a następnie wznowić za pomocą
fg
(przenosi proces do pierwszy plan).Na przykład:
źródło
Zrobiłem aplikację, która wyśle powiadomienie na Twój telefon z Androidem, gdy proces się zakończy, więc nie musisz być przywiązany do komputera.
Zainstaluj, a następnie dodaj
;notifier.sh
na końcu polecenia.Na przykład, jeśli twoje polecenie było
make install
, wydasz polecenie:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
źródło