Получение ssh для выполнения команды в фоновом режиме на целевой машине

Более простое и многоразовое решение, возможно, для использования настраиваемой структурной директивы.

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';

@Directive({
  selector: '[appTimes]'
})
export class AppTimesDirective {

  constructor(
    private templateRef: TemplateRef<any>,
    private viewContainer: ViewContainerRef) { }

  @Input() set appTimes(times: number) {
    for (let i = 0 ; i < times ; i++) {
      this.viewContainer.createEmbeddedView(this.templateRef);
    }
  }

}

И используйте его следующим образом:

<span *appTimes="3" class="fa fa-star"></span>
282
задан Community 23 May 2017 в 02:34
поделиться

4 ответа

У меня была эта проблема в программе, которую я записал год назад - оказывается, что ответ является скорее сложным. Необходимо будет использовать nohup, а также перенаправление вывода, как объяснено в Википедии artcle на nohup, скопированный здесь для удобства.

задания Nohuping фона, например, полезны, когда зарегистрировано на пути SSH, так как фоновые задания могут заставить оболочку зависать на выходе из системы из-за состояния состязания [2]. Эта проблема может также быть преодолена путем перенаправления всех трех потоков ввода-вывода:

nohup myprogram > foo.out 2> foo.err < /dev/null &
298
ответ дан Jax 23 November 2019 в 01:56
поделиться

Если Вы/можете, сохраняют соединение открытым, Вы могли бы использовать экран , если Вы имеете права установить его.

user@localhost $ screen -t remote-command
user@localhost $ ssh user@target # now inside of a screen session
user@remotehost $ cd /some/directory; program-to-execute &

Для отсоединения экранной сессии: ctrl-a d

Для списка экранных сессий:

screen -ls

Для повторного прикрепления сессии:

screen -d -r remote-command

Примечание, что экран может также создать несколько оболочек в каждой сессии. Подобный эффект может быть достигнут с tmux.

user@localhost $ tmux
user@localhost $ ssh user@target # now inside of a tmux session
user@remotehost $ cd /some/directory; program-to-execute &

Для отсоединения tmux сессии: ctrl-b d

Для списка экранных сессий:

tmux list-sessions

Для повторного прикрепления сессии:

tmux attach <session number>

значение по умолчанию tmux клавиша CTRL, ' ctrl-b ', несколько трудно использовать, но существует несколько примеров tmux конфигурации, которые поставлются с tmux, который можно попробовать.

20
ответ дан chicks 23 November 2019 в 01:56
поделиться

Я думаю, что необходимо будет объединить несколько этих ответов для получения то, что Вы хотите. Если Вы используете nohup в сочетании с точкой с запятой и обертываете все это в кавычки, то Вы добираетесь:

ssh user@target "cd /some/directory; nohup myprogram > foo.out 2> foo.err < /dev/null"

, который, кажется, работает на меня. С nohup Вы не должны добавлять & к команде, которая будет выполнена. Кроме того, если Вы не должны читать ни один вывод команды, можно использовать

ssh user@target "cd /some/directory; nohup myprogram > /dev/null 2>&1"

для перенаправления всего вывода к/dev/null.

6
ответ дан 23 November 2019 в 01:56
поделиться

Это был самый чистый способ сделать это для меня: -

ssh -n -f user@host "sh -c 'cd /whereever; nohup ./whatever > /dev/null 2>&1 &'"

Единственное, что выполняется после этой команды, - это настоящая команда на удаленной машине

245
ответ дан 23 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: