У меня есть скрипт init.d, который я хочу, чтобы он работал в фоновом режиме, даже когда я выходил из терминала. Однако я пытался заставить его работать в фоновом режиме с nohup
, но у меня не было «никакой надежды», потому что когда я выходил, глядя на pstree
, я вижу, что ПИД исчезает и, таким образом, nohup
перестает работать.
В: Есть ли другой способ, кроме nohup
, выдвинуть скрипт, который работает на переднем плане на задний план, даже после выхода из терминала?
Хорошо, таким образом, существует несколько опций:
disown
Можно объединиться disown
и &
продвигать Ваш сценарий к фону
$ disown [your_script] &
[your_script]
может быть проверен jobs
команда. После того, как введенный Вы будете видеть: $ jobs
[1]+ Running [your_script]
И уничтожение может быть сделано kill %1
, 1
относится к числу задания, замеченному выше. Это - лучшая альтернатива nohup
поскольку это не уезжает nohup.out
файлы замусорены на всем протяжении файловой системы.
screen
"Виртуальный" терминал, который можно выполнить от "реального" терминала (на самом деле, все терминалы сегодня являются "виртуальными", но это - другая тема в течение другого дня). Screen
будет продолжать бежать, даже если Ваша ssh сессия будет разъединена. Любой процесс, который Вы запускаете в a screen
сессия будет продолжать бежать с той экранной сессией. Когда Вы снова соединяетесь с сервером, можно снова соединиться с экранной сессией, и все будет то, как будто ничего не произошло кроме времени, которое передало.
Превосходный источник: Говорящий UNIX: Сидячая забастовка', изобилующая Экраном".
Вот "волшебная" команда (объяснение ниже):
thecommand &>/dev/null &
thecommand
, очевидно, команда. &>/dev/null
перенаправления весь вывод команды к черной дыре. &
выполнения процесс в фоновом режиме. Используйте &
после Вашей команды в сценарии как:
your command here > /dev/null 2>&1
exit
Я не могу отлично понять Вашу проблему, но...
В моем случае, я использую screen
для таких длительных фоновых заданий. Это обеспечивает виртуальный терминал, который является attachable/dettachable в любое время. Таким образом, я могу выйти из системы от исходной сессии, не закрыв виртуальный сеанс и вернуть ту сессию каждый раз, когда я хочу.
так или иначе, это не для сценариев стиля init.d.
Я должен выполнить длительную команду (rsync) через SSH (на QNAP nas). Та машина не имеет nohup, ни экрана установленными. Я хотел бы смочь выполнить команду без потребности сохранить мой ноутбук с ssh клиентом, работающим все время. Ответы, предложенные здесь с фоном или амперсандом (и) просто, не работают. Люди не могли бы знать, что nohup на самом деле экранирует процесс для прерываний SIGTERM и SIGINT. Таким образом без nohup я заканчиваю со следующей ошибкой каждый раз, когда я разъединяю свою ssh сессию:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(553) [receiver=3.0.7]rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(553) [generator=3.0.7]
Таким образом в моем случае setsid помог вместо nohup.
nohup your_command_here > /dev/null 2>&1 &
Вам необходимо: