PDA

View Full Version : Как посмореть задачи в процессе?


Yaguar
31-01-2008, 16:30
К примеру: curl http://www.domen.ru/file >> file
Затем я закрываю telnet, и как теперь посмотреть, что происходит с закачкой?:confused:

angel_il
31-01-2008, 18:42
К примеру: curl http://www.domen.ru/file >> file
Затем я закрываю telnet, и как теперь посмотреть, что происходит с закачкой?:confused:

с закачкой все в порядке, она прибивается вместе с сессией, чтобы не прибивалась надо пользоваться screen

ABATAPA
31-01-2008, 19:29
с закачкой все в порядке, она прибивается вместе с сессией, чтобы не прибивалась надо пользоваться screen

Или, если не установлены доп. пакеты, nohup.

al37919
31-01-2008, 19:59
господа грамотеи...
Чтобы запустить задачу в субшеле надо делать так:
curl http://www.domen.ru/file >> file &
после этого можно закрыть телнет сессию, потом открыть новую и наблюдать за содержимым file...

да, nohup делает то же самое, но & --- это встроенная фича шела.

на всякий случай добавлю маленький кусочек общего ликбеза:

если запустить
curl http://www.domen.ru/file >> file
то можно выполнить CTRL-Z (это приведет к тому, что выполняемая задача приостановится)
после этого запускаем
bg
и последняя приостановленная задача отправляется на выполнение в фоновом режиме (то же что в первом случае)

Комманды имеющие отношение к контролю задач: fg, bg, %, jobs

Достаточно подробное описание /bin/sh мне попалось здесь:
http://www.freebsd.org/cgi/man.cgi?query=sh&format=html

angel_il
31-01-2008, 20:18
господа грамотеи...

:))
да можно конечно ctrl-z пользоваться (под pc именно так и делал) а вот на рутере проще пользоваться screen, памяти мало и после ctrl-z свопиться начинает неприятно долго.

al37919
31-01-2008, 21:29
& и screen существуют для разных задач...
& --- удобен если запускается нечто, что не предполагает вмешательства юзера, например, "wget чего-то-там &"
screen --- хорошая весчь если мы имеем возможность управлять процессом иногда отключаясь от него (типичный пример rtorrent)

ABATAPA
01-02-2008, 17:16
господа грамотеи...
Чтобы запустить задачу в субшеле надо делать так:
curl http://www.domen.ru/file >> file &


Господа безграмотные пользователи, не нужно давать необдуманных советов.
Например, в указанном примере не переадресован поток сообщений об ошибках, и в случае вывода оных процесс будет приостановлен, а если связывающий этот поток дескриптор закрыт - то к завершению процесса сигналом.
С nohup этого не произойдет, т.к. :
"`nohup' runs the given COMMAND with hangup signals ignored, so that the
command can continue running in the background after you log out."

al37919
02-02-2008, 19:25
Коллега, зря спорим: практика --- критерий истины (с) К. Маркс

Вы просто попробуйте:

Запускаем (закачиваемый файл curl выводит в stdout, а прогресс закачки в stderr --- я этого не знал, т.к. обычно пользуюсь wget)
curl http://www.chipdip.ru/library/DOC000143087.pdf > 1.pdf &
далее смотрим ps -Af:
root 20902 20219 4 20:53 pts/4 00:00:00 curl http://www.chipdip.ru/library/DOC000143087.pdf
закрываем pts4 сессию:
root 20902 1 3 20:53 ? 00:00:00 curl http://www.chipdip.ru/library/DOC000143087.pdf
По моему все понятно. Кстати, попробовал этот самый nohup:
nohup curl http://www.chipdip.ru/library/DOC000143087.pdf > 1.pdf
Вот тут то отсутствие редиректа stderr приводит к трагическим последствиям:
ignoring input and redirecting stderr to stdout
В результате файл закачан ошибочно.

Короче забираю свои слова о том, что & делает то же самое, что и nohup и делаю новое утвеждение, что использование & в общем случае безопаснее, хотя при определенных условиях от nohup можно добиться сходного поведения.

У меня есть сильное подозрение, что nohup предназначен для иных задач.

Возвращаясь к вопросу автора --- уточняю. Запускать закачку надо/можно так:

curl http://www.domen.ru/file > file 2> logfile &
Если запустить ее коммандой:
nohup curl http://www.domen.ru/file > file 2> logfile &
то результат будет тот же, только нужна ли лишняя комманда где можно обойтись без нее?

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

tail -f logfile

djet
02-02-2008, 20:57
А у wget'a это фича:

Wget is non-interactive, meaning that it can work in the background, while the user is not logged on. This allows you to start
a retrieval and disconnect from the system, letting Wget finish the work.

screen - тоже архиполезная штука, с ним никакие дисконнекты не страшны.

angel_il
02-02-2008, 21:00
вобщем так или иначе я в putty прописал screen -R в поле SSH/Remote program, теперь при подключении к роутеру если нет ниодной сессии то создается новая сессия со скрином, иначе происходит подключение к существующей. При закрытии текущей сессии программы продолжают работать в бакграунде. Довольно удобно. Если захочу прибить сессию напишу exit.

djet
02-02-2008, 21:08
вобщем так или иначе я в putty прописал screen -R в поле SSH/Remote program, теперь при подключении к роутеру если нет ниодной сессии то создается новая сессия со скрином, иначе происходит подключение к существующей. При закрытии текущей сессии программы продолжают работать в бакграунде. Довольно удобно. Если захочу прибить сессию напишу exit.

Ещё один вариант:
[routah:harddisk] cat ~/.profile
...

if [ -z "$STY" -a -z "$SSH_CLIENT" -a -n "$PS1" -a -x /opt/bin/screen -a "$LOGNAME" = "djet" ]; then
exec screen -A -x -RR
fi

+ ещё один юзер на fail-safe.

al37919
02-02-2008, 21:09
Как показано выше, у curl с этим проблем тоже нет, если грамотно запускать.

А если у меня по жизни rtorrent в screen живет? ;)

Получается при подключении с screen -r я попаду в rtorrent, а может я этого вовсе не хочу :rolleyes:

Ilmarinen
02-02-2008, 21:26
Как показано выше, у curl с этим проблем тоже нет, если грамотно запускать.

А если у меня по жизни rtorrent в screen живет? ;)

Получается при подключении с screen -r я попаду в rtorrent, а может я этого вовсе не хочу :rolleyes:
Так в screen можно держать столько сессий сколько Вам нужно, по Ctrl+A-N (N - -номер сессии) можно между ними переключаться.
У меня "по жизни" в screen живут irssi и куча консолей "с этим проблем тоже нет" ;)

al37919
02-02-2008, 21:38
да проблем то нет --- это точно. Тогда надо запускать что то вроде screen -r -S name чтобы попасть куда-то в ожидаемое место, да еще предварительно это место создать... Так что просто screen -R в виде умолчания у putty как то не катит... :)

djet
02-02-2008, 21:51
У меня screen вместо шелла. При соединении открывается то окно, которые было активировано последним. На мой взляд, вполне логично.