Это много зависит от того, на каком обновлении компилятора вы сделали. Если бы это было существенно, то все должно быть перекомпилировано *) из-за возможных изменений в ABI под компилятором. Во многих случаях это не будет необходимо, но если ваши пакеты зависят от чего-то вроде C ++ 11, то вы можете столкнуться с проблемами - см. E.g. Новости News о смене ABI в GCC 4.7 или GCC Bugzilla .
*) Обратите внимание на акцент на «перекомпилированном» - определенно не имеет большого смысла перекомпилировать (прочитайте восстановление) приложение Python или Perl, потому что вы изменили компилятор C. Если у него также не имеет родной компонент (который это хорошо может).
вы просто связываете команды 1. your_script
и 2. kill this screen session
Let foo.sh
be your script. Командой для завершения сеанса экрана является kill
. Вы выдаете команду на сеанс экрана с помощью screen -X
, что делает screen -X kill
командой shell/bash для завершения сеанса экрана, в котором Вы находитесь в данный момент. Вы бы
screen -S the_session_for_my_job
создали сеанс экрана, а затем
/path/to/foo.sh; screen -X kill
Это убьет сеанс экрана, независимо от количества окон, и сделает это после того, как foo.sh закончит.
Более сложным способом является просмотр идентификаторов процесса и выдача команды kill при исчезновении определенного PID.
Пусть 12345 PID процесса, который вы хотите наблюдать. Тогда вы бы
while ps a | grep ^12345;do sleep 2; done; screen -X kill
В то время как петля просматривает список процессов для процесса с PID 12345. Если такой процесс существует, он проспит 2 секунды перед повторной проверкой. Если процесс с таким PID не существует, то цикл завершается. Затем выдается команда kill.
Я использую электронную почту со следующей записью:
command | mail-s job_output to@email.com; exit
Или, если она уже запущена, вы можете ввести (или скопировать-вставить, если есть много вывода) команды для выполнения после завершения:
echo $STY done | mail -s job_done to@email.com; exit