Как сохранить работоспособность моей программы для Linux после выхода из ssh моего пользователя без полномочий root? - PullRequest
2 голосов
/ 17 марта 2012

Я искал, гуглил, сидел в IRC неделю и даже разговаривал с другом, который преданно настроен на linux, но я до сих пор не получил убедительного ответа.

Я написал сценарий оболочки, который запускается, как только я вхожу в систему от имени пользователя, не являющегося пользователем root, и запускается, в основном, без "./myprogram &" без кавычек. Когда я завершаю работу, моя программа перестает работать, и я не могу подключиться к ней, пока не войду в систему. Как я могу сохранить свою программу работающей после выхода из SSH моего пользователя без полномочий root?

Мне любопытно, нужно ли это делать на программном уровне или как? Приношу свои извинения, если это не относится к этой теме, я не уверен, к чему это приведет, если честно.

Ответы [ 4 ]

7 голосов
/ 17 марта 2012

Помимо использования nohup, вы можете запустить вашу программу в терминальном мультиплексоре, например screen или tmux. С их помощью вы можете присоединиться к сеансам, что, например, очень полезно, если вам нужно запускать интерактивные программы на основе терминала или долго выполнять скрипты по нестабильным ssh-соединениям.

boybu - хорошее улучшение screen.

3 голосов
/ 17 марта 2012

Попробуйте nohup: http://linux.die.net/man/1/nohup

Вероятно, ваша программа получает сигнал SIGHUP при выходе из сеанса SSH.

2 голосов
/ 17 марта 2012

Есть два сигнала, которые могут привести к смерти вашей программы после окончания сеанса ssh: SIGHUP и SIGPIPE.

SIGHUP будет отправлено в вашу программу, потому что родительский процесс (ssh) умер. Вы можете обойти это либо с помощью программы nohup (т.е. nohup ./myprogram &), либо с помощью встроенной оболочки disown (./myprogram& disown)

SIGPIPE будет отправлено в вашу программу, если она попытается записать в stdout или stderr после того, как сеанс ssh был отключен. Чтобы обойти это, перенаправьте их в файл или /dev/null, т.е. nohup ./myprogram >/dev/null 2>/dev/null &

0 голосов
/ 17 марта 2012

Вы также можете использовать команду batch (или at) в дополнение к другим ответам (nohup, screen, ...). И у ssh есть опция -f, которая может вас заинтересовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...