Как использовать nohup, чтобы продолжить выполнение команды после выхода пользователя из системы?

nohup <command> <arg> &

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

В последнее время я использую стек серверов, называемый стеком Bitnami Node.js. Это автономный пакет программного обеспечения. E сть node двоичный файл в папке bin в установочном каталоге.

В командной строке я могу использовать node Команда для запуска моих программ JS: node <js_program.js>, Нет проблем.

Но я хотел бы продолжить запуск программы после выхода из SSH. Когда я бегу nohup <installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out> &программа будет работать в фоновом режиме. Но, когда я выйду из SSH, программа также будет немедленно завершена. Кажется, что nohup команда не имеет никакого эффекта в этом случае.

Как я могу исправить эту проблему?

3 ответа

Решение

Мне удалось решить эту проблему, изменив способ выхода из терминала оболочки SSH.

Вместо нажатия X кнопку, чтобы закрыть окно PuTTY, я печатаю exit в терминале оболочки SSH для выхода. Теперь процесс может продолжать работать в фоновом режиме после выхода из системы.

Если я нажму X Нажмите кнопку, чтобы закрыть окно, фоновый процесс немедленно прекратится.

Бег:

nohup command ... > file &

оставит stderr и stdin открытым. Вместо этого запустите:

nohup command ... > file 2>&1 <&- &

или же:

nohup command ... > logfile 2> errfile <&- &

который перенаправит стандартный вывод и закроет стандартный ввод.

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

Если у вас есть at пакет установлен, и вам не будет отказано (либо напрямую через /etc/at.denyили неявно через /etc/at.allow), попробуйте использовать одно из:

  echo "<installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out>" | at now

или же:

  at now

и укажите свою команду на at> незамедлительный.

Это должно запланировать выполнение команды немедленно через at демон.

Вот как я традиционно "подражал" nohup на системах с поломкой nohup реализации (например, AIX 5.3 и более ранние).

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