LINUX.ORG.RU

Куда идет выход nohup после сбоя сети


0

1

Я запустил в nohup программу с выводом в файл (a.out > l) Этот файл находится на диске другой машины, примонтированной по sshfs. Эта 2-я машина внезапно перезагрузилась, но программа продолжает считать (100%). Однако в /proc/????/fd осталась битая ссылка на файл вывода, и нет возможности поглядеть, как идет счет. Можно ли найти, куда идет выход? Что будет, когда счет закончится (должен открыться файл и записаться результат)?


выход идет в никуда
если вычисления очень долгие настолько, что дорого запускать еще раз, и результат очень важен, и результат будет только в конце работы приложения, и этот результат — не очень много текста, то его еще можно поймать с помощью strace

anonymous
()

такие программы лучше запускать в мультиплексоре screen или tmux с выводом одновременно на экран и в файл через tee

myprog | tee myprog.log
anonymous
()
Ответ на: комментарий от anonymous

Да 20 суток уже 2 программы отсчитали, где-то уже конец близок (был, а теперь как узнаешь), времени жалко… Перед окончанием должны быть записаны результаты - открыт дисковый файл и потом закрыт. Но, опасаюсь, рабочая директория тоже программе недоступна. Попытки исправить симлинки из /proc/????/fd не удаются. Засада…

vvbryz
() автор топика
Ответ на: комментарий от vvbryz

дык, результат выводится не через stdout, уже успешно перенаправленный в файл, который нормально открылся, и только потом возникла проблема с удаленным сервером?
в конце будет попытка открыть новый файл для выдачи результата? тогда можно попробовать подмонтировать в пропавшую директорию какой-нибудь другой ресурс

anonymous
()
Ответ на: комментарий от anonymous

7945 bryz 20 0 991072 14972 2212 R 100,0 0,1 26050:34 mu 24804 bryz 20 0 1031324 67656 2172 R 100,0 0,4 31990:36 a

root@node11:~# cd /proc//7945/fd root@node11:/proc/7945/fd# ll итого 0 lr-x—— 1 bryz bryz 64 янв 31 12:10 0 -> /dev/null l-wx—— 1 bryz bryz 64 янв 31 12:10 1 -> /home/bryz/1/41/1/l l-wx—— 1 bryz bryz 64 янв 31 12:10 2 -> /home/bryz/1/41/1/nohup.out

root@node11:/proc/7945/fd# rm 1 rm: удалить символьная ссылка ‘1’? y rm: невозможно удалить ‘1’: Операция не позволена root@node11:/proc/7945/fd# rm 2 rm: удалить символьная ссылка ‘2’? y rm: невозможно удалить ‘2’: Операция не позволена root@node11:/proc/7945/fd#

vvbryz
() автор топика

Возможно, уже не актуально, но оставлю информацию. stdout можно «забрать» обратно на терминал с помощью reptyr. И можно по аналогии подключится с помощью gdb к процессу, вызвать системный вызов chdir(«ПУТЬ») и продолжить выполнение процесса:

gdb --batch -ex 'call chdir("/some/dir")' -p "ИД_процесса"
А пока, если он ещё не закончил считать, остановить его сигналом SIGSTOP, потренироваться с gdb на других процессах, возобновить SIGCONT'ом и gdb'шнуть этот счётный процесс.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.