Контроль работы и ssh

Я не могу найти приличный способ управлять работой через SSH. Я хочу начать работу в сеансе ssh, выйти из системы, снова войти в систему, выполнить команду fg, проверить работу, выйти из системы, а затем повторить весь процесс. Похоже, nohup плохо работает.

Я использовал эту команду

 $ nohup script & > nohup.out 
 [1] 28128
 $ nohup: ignoring input and appending output to `nohup.out'
 [1]+  Exit 255                nohup script

Если я сделаю либо

$ jobs
$ ps -ef |  grep script

Я ничего не получаю, т.е. процесс не найден.

Кроме того, у меня есть связанный вопрос: если я нахожусь в сеансе ssh и хочу отправить задание в фоновый режим, ctrl-z не работает. Что делать?

Кто-нибудь может мне помочь?

6 ответов

Решение

Хорошо - один из вариантов - использовать экран.

  1. Вы входите в систему
  2. Вы запускаете экран
  3. ты управляешь своей работой
  4. Вы нажимаете Ctrl+ Ad, чтобы отделить
  5. Вы выходите
  6. через несколько часов вы входите в систему и запускаете screen -r - у вас есть результат shell / job перед вами. или, может быть, все еще работает...

больше примеров здесь.

другой вариант - возможно, хуже, если это одноразовая работа - демонизировать сценарий оболочки, добавить правильное ведение журнала и использовать start-stop-daemon для запуска его в фоновом режиме до его завершения. статус - может быть проверен в журналах производства.

Я использую экран также для этого.. как правило, я вхожу и запускаю

screen -S $meaningful-name

Затем, когда я воссоединяюсь, я просто бегу

screen -r $meaningful-name

Я также обычно добавляю свое имя пользователя в экранное имя сеанса, если я работаю от имени пользователя root на одном из наших серверов, чтобы другие люди могли видеть его и подключаться к нему, если это необходимо.

Вы можете использовать программу screen, Я использую его для управления несколькими интерактивными оболочками.

Использование:

screen
startyoujob.sh
<C-A D> (Ctrl A then D, will detach your session)
screen -r (this will reattach your session)

Немного screen опрокидывается в Arch Linux Wiki, официальном screen веб-сайт, и некоторые советы и рекомендации для вашего экрана (со скриншотами).

Если вы хотите использовать экран без присмотра, используйте:

# screen -d -m script.sh

Что бы поставить ваш сценарий на заднем плане, отстранен! Теперь вы можете легко выйти и продолжить то, что вы делали.

Если вы не хотите использовать экран, единственным другим вариантом будет отправить все выходные данные в лог-файл и запустить tail в лог-файле для просмотра прогресса. Это предполагает, что задание не является интерактивным, что, вероятно, должно иметь место в случае любой продолжительной работы в любом случае. Если вам нужно преждевременно остановить работу, вы можете использовать ps, чтобы найти pid и просто убить его.

Глядя на вашу команду выше, вы должны просто проверить содержимое nohup.out. Но Nohup не требуется, вы можете запустить задание, запустить ^Z, а затем набрать "disown" (в любом случае, в bash - это удалит задание из списка заданий, но обходного пути нет).

Вы можете объединить screen и ssh в одну команду:

ssh hostname -t screen -RD

Нажмите Control-A Control-D для отключения.

Другие вопросы по тегам