Я подключаюсь к некоторой машине Mac с помощью SSH и запускаю команду, похожую на:
nohup /var/root/install.sh param1 param2 </dev/null >/var/root/vvv.out 2>&1 & echo '' ; echo ERROR_CODE:$?
Кажется, все работает нормально, но если я закрою сеанс в середине установки, сеанс зависнет и будет виден с помощью ps
команда.
Кажется, тот же трюк успешно работает на машинах Linux.
Любые идеи?
редактировать: Сведения о среде: 7.9.0 Ядро Дарвина, версия 7.9.0: среда, 30 марта, 20:11:17 PST 2005; корень: xnu / xnu-517.12.7.obj ~ 1 / RELEASE_PPC Power Macintosh powerpc
Может быть, эта версия слишком старая? В соответствии с Википедия Поддерживались блоки питания до августа 2006 г.
мне бы угадать что это связано с тем, что процесс все еще принадлежит своему контролирующему терминалу, и он сбивается с толку, когда он уходит. Если вы используете bash
на дальнем конце вы можете попробовать добавить вызов disown
переродить это.
Думаю, есть разница между "встроенной оболочкой" nohup и программой nohup. Вы также можете, надеюсь, обойти это с помощью ssh -n вместо простого ssh.
Мой macbook уже давно мертвый кирпич, поэтому я только предполагаю. :)
Вы правы, не уверен, что это сработает. Я думаю, это может быть связано с тем фактом, что OS 10 основана на Unix, и они не используют ту же версию nohup или что-то в этом роде. Я не уверен, но я пробовал nohup на SunOS 5.10, и он не работал так же, как на linux.
Это привлекло мое внимание к прекрасной программе под названием screen. Насколько я помню, screen доступен по умолчанию в системах UNIX / Linux.
Используйте [CTRL] - A, затем нажмите D, чтобы выйти за пределы экрана. Используйте screen -r, чтобы возобновить сеанс. Если вы запускаете несколько экземпляров экрана, вы автоматически увидите идентификаторы процесса для каждого экземпляра экрана, и вам нужно будет указать процесс, набрав screen -r # process-id.
Подсказка: вы можете запустить один и тот же экземпляр screen для нескольких учетных записей одновременно, вызвав screen -x. Это полезно для ssh или просто для разных терминалов на одном компьютере. Очень полезно, если у вас есть ноутбук, подключенный к последовательной консоли, и вы не можете взять компьютер с собой. screen может взаимодействовать с последовательными устройствами .. просто попробуйте screen / dev / ttyS0 или другое название устройства!
hf
У вас есть эхо в конце командной строки, но куда должно идти это эхо, если вы закрыли терминал? Куда уходит эхо в Linux? Мне было бы любопытно, что произойдет, если вы удалите эхо в конце и запустите его просто в качестве теста.
Вы можете создать сценарий всего этого и перенаправить вывод на электронную почту или в файл.