View Full Version : Как посмореть задачи в процессе?
К примеру: 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
с закачкой все в порядке, она прибивается вместе с сессией, чтобы не прибивалась надо пользоваться screen
Или, если не установлены доп. пакеты, nohup.
господа грамотеи...
Чтобы запустить задачу в субшеле надо делать так:
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 свопиться начинает неприятно долго.
& и screen существуют для разных задач...
& --- удобен если запускается нечто, что не предполагает вмешательства юзера, например, "wget чего-то-там &"
screen --- хорошая весчь если мы имеем возможность управлять процессом иногда отключаясь от него (типичный пример rtorrent)
господа грамотеи...
Чтобы запустить задачу в субшеле надо делать так:
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."
Коллега, зря спорим: практика --- критерий истины (с) К. Маркс
Вы просто попробуйте:
Запускаем (закачиваемый файл 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
А у 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.
вобщем так или иначе я в 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.
Как показано выше, у 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 и куча консолей "с этим проблем тоже нет" ;)
да проблем то нет --- это точно. Тогда надо запускать что то вроде screen -r -S name чтобы попасть куда-то в ожидаемое место, да еще предварительно это место создать... Так что просто screen -R в виде умолчания у putty как то не катит... :)
У меня screen вместо шелла. При соединении открывается то окно, которые было активировано последним. На мой взляд, вполне логично.