Кажется, я не могу найти достойного способа управлять заданиями по 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 не работает. Что делать?
Кто-нибудь может мне помочь?
ну - один из вариантов - использовать экран.
больше примеров Вот.
другой - возможно, хуже, если это одноразовая работа - вариант состоит в том, чтобы демонизировать ваш сценарий оболочки, добавить надлежащее ведение журнала и использовать 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 вики, то официальный screen
интернет сайт, и немного советы и рекомендации для вашего screenrc (со скриншотами).
Если вы хотите использовать screen в автоматическом режиме, используйте:
# screen -d -m script.sh
Это поместит ваш сценарий в фоновый режим, отдельно! Теперь вы можете легко выйти из системы и продолжить то, что делали.
Если вы не хотите использовать screen, единственный другой вариант - отправить весь вывод в файл журнала и запустить tail в файле журнала для просмотра прогресса. Это предполагает, что задание не интерактивно, что, вероятно, должно быть в любом случае для любого длительного задания. Если вам нужно преждевременно остановить работу, вы можете использовать ps, чтобы найти pid и просто убить его.
Глядя на вашу команду выше, вы должны просто иметь возможность проверить содержимое nohup.out. Однако в Nohup нет необходимости, вы можете запустить задание, запустить ^ Z, затем ввести 'disown' (в любом случае в bash - это удалит задание из списка заданий, но этого не избежать).
Вы можете объединить screen и ssh в один с помощью этой команды:
ssh hostname -t screen -RD
Нажмите Control-A Control-D, чтобы отключиться.