Как использовать 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 и более ранние).