Назад | Перейти на главную страницу

Как использовать 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 в этом случае команда не действует.

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

Бег:

nohup command ... > file &

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

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

или:

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

который перенаправит stdout и закроет stdin.

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

Если у вас есть 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 и более ранние версии).

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

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

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