Это дополнительный вопрос к Как вы используете ssh в сценарии оболочки? вопрос. Если я хочу выполнить команду на удаленной машине, которая работает в фоновом режиме на этой машине, как мне получить команду ssh для возврата? Когда я пытаюсь просто включить амперсанд (&) в конце команды, он просто зависает. Точная форма команды выглядит следующим образом:
ssh user@target "cd /some/directory; program-to-execute &"
Любые идеи? Следует отметить, что при входе на целевой компьютер всегда появляется текстовый баннер, и у меня настроены ключи SSH , поэтому пароль не требуется.
/dev/null
.< /dev/null
значит? Спасибо.Это был самый чистый способ сделать это для меня:
После этого запускается только команда на удаленном компьютере.
источник
-n
не нужно, как-f
следует-n
ssh -f
оставляет процесс SSH подключенным, просто фоновым. Решения / dev / null позволяют ssh быстро отключаться, что может быть предпочтительнее.Перенаправить FD
Вывод должен быть перенаправлен с помощью
&>/dev/null
которого перенаправляет как stderr, так и stdout в / dev / null и является синонимом>/dev/null 2>/dev/null
или>/dev/null 2>&1
.круглые скобки
Лучший способ - это использовать
sh -c '( ( command ) & )'
там, где есть команда.Nohup Shell
Вы также можете использовать nohup напрямую для запуска оболочки:
Хороший запуск
Другой трюк заключается в использовании nice для запуска команды / оболочки:
источник
nohup
делает добавление различий , и почему и когда вы будете использоватьnice
? Я думаю, что это многое добавит к этому ответу.Если вы не можете / не можете держать соединение открытым, вы можете использовать экран , если у вас есть права на его установку.
Чтобы отсоединить сеанс экрана: ctrl-a d
Чтобы перечислить сеансы экрана:
Чтобы присоединить сеанс:
Обратите внимание, что экран также может создавать несколько оболочек в каждом сеансе. Подобного эффекта можно добиться с помощью tmux .
Чтобы отключить сеанс tmux: ctrl-b d
Чтобы перечислить сеансы экрана:
Чтобы присоединить сеанс:
Управляющий ключ tmux по умолчанию, ' ctrl-b', несколько сложен в использовании, но есть несколько примеров конфигураций tmux, которые поставляются с tmux, которые вы можете попробовать.
источник
screen
для этого?Я просто хотел показать рабочий пример, который вы можете вырезать и вставить:
источник
Самый быстрый и простой способ - использовать команду at:
источник
at
принимались аргументы командной строки, а не только из файла.Я думаю, вам придется объединить пару ответов, чтобы получить то, что вы хотите. Если вы используете nohup в сочетании с точкой с запятой и заключаете все это в кавычки, то вы получите:
который, кажется, работает для меня. С nohup вам не нужно добавлять & к команде для запуска. Кроме того, если вам не нужно читать какие-либо выходные данные команды, вы можете использовать
перенаправить весь вывод в / dev / null.
источник
Это сработало для меня, возможно, раз:
источник
Вы можете сделать это так ...
источник
На самом деле, всякий раз, когда мне нужно выполнить команду на удаленной машине, которая является сложной, мне нравится помещать команду в сценарий на конечном компьютере, и просто запускать этот сценарий, используя ssh.
Например:
И тогда я просто запускаю эту команду на исходном компьютере:
источник
Я пытался сделать то же самое, но с добавленной сложностью, что я пытался сделать это из Java. Таким образом, на одном компьютере с Java я пытался запустить скрипт на другом компьютере в фоновом режиме (с nohup).
Вот что сработало из командной строки: (вам может не понадобиться ключ -i, если вам не нужен ssh для хоста)
Обратите внимание, что в моей командной строке есть один аргумент после «-c», который находится в кавычках. Но для того, чтобы он работал на другом конце, ему все еще нужны кавычки, поэтому мне пришлось поместить в него экранированные кавычки.
С Java, вот что сработало:
Потребовалось немного проб и ошибок, чтобы это заработало, но, похоже, сейчас это работает хорошо.
источник
Мне показалось довольно удобным иметь удаленный сеанс tmux с использованием следующего
tmux new -d <shell cmd>
синтаксиса:Это запустит новый сеанс на
elsewhere
хосте, а команда ssh на локальном компьютере почти мгновенно вернется в оболочку. Затем вы можете SSH к удаленному хосту иtmux attach
к этому сеансу. Обратите внимание, что в локальной tmux нет ничего, кроме удаленной!Кроме того, если вы хотите, чтобы ваш сеанс сохранялся после выполнения задания, просто добавьте панель запуска после вашей команды, но не забудьте заключить в кавычки:
источник
Это должно запустить команду и назначить идентификатор процесса, который вы можете просто привязать -f YOUR-LOG.log, чтобы увидеть результаты, записанные в него, по мере их появления. Вы можете выйти из системы в любое время, и процесс продолжится
источник
Вы можете сделать это без nohup:
источник
Я думаю, что это то, что вам нужно: сначала вам нужно установить
sshpass
на свой компьютер. тогда вы можете написать свой собственный скрипт:источник
Сначала выполните эту процедуру:
Войдите в систему как пользователь a и сгенерируйте пару ключей аутентификации. Не вводите парольную фразу:
Теперь используйте ssh для создания каталога ~ / .ssh от имени пользователя b на B. (Каталог может уже существовать, что нормально):
Наконец, добавьте новый открытый ключ a в b @ B: .ssh / authorized_keys и введите пароль b в последний раз:
Отныне вы можете войти в B как b из A как без пароля:
тогда это будет работать без ввода пароля
ssh b @ B "cd / some / directory; программа для выполнения &"
источник