Как запустить в фоновом режиме команду Linux в Windows WSL (Ubuntu1804)

Стремясь предоставить некоторые преимущества Linux моим клиентам, работающим с Windows 10, я разработал несколько сценариев bash, чтобы автоматизировать некоторые из их повседневных задач.

Я использую, чтобы позволить им запускать сценарии через пакет Windows со следующим содержимым:

Ubuntu1804 run /usr/local/bin/script.sh

К сожалению, некоторые сценарии занимают много времени, либо для огромных запросов sql, либо для медленных сетевых операций и операций ввода-вывода, и во время этого ожидания некоторые пользователи просто не могут удержаться от закрытия «странного черного окна», тем самым убивая процесс.

Вышеупомянутая команда будет убита, даже если заключить в кавычки с & в конце.

Я попробовал следующее и не получил testOK на моем рабочем столе.

Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK &"

При этом окно остается открытым и вместо этого создается файл testOK .

Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK"

Мне было интересно, есть ли способ избежать процесс в Ubuntu WSL будет завершен, как только окно будет закрыто.

Предотвратить появление окна вообще было бы здорово.

Запретить пользователю взаимодействовать с ним было бы приемлемым решением.

Клиенты - Windows 10 Professional с последним набором обновлений безопасности и качества, я не предоставляю подробные сведения о сайте, поскольку это происходит в более поздних версиях. Для одного клиента некоторые из них представляют собой большие домены MS AD, некоторые - небольшие офисы с простой рабочей группой.

0
задан 24 January 2019 в 18:13
2 ответа

Linux X11 отправляет SIGHUP запущенным процессам, у которых дескриптор файла открыт в окне терминала, когда окно терминала закрывается. Все программы по умолчанию имеют дескрипторы файлов stdin, stdout и stderr, открытые для окна терминала, в котором была создана программа. WSL имитирует это поведение.

Одно из решений - использовать nohup. Если test.sh:

#!/bin/sh
sleep 10
touch ~/testOK

Тогда вы можете запустить его следующим образом:

D:> ubuntu run nohup sh -x ~/test.sh &

Если я сразу закрою окно cmd после ввода этой строки, я получу файл «nohup.out» в D: (мой текущий рабочий каталог) текст, сгенерированный test.sh, и через несколько секунд получить testOK в моем домашнем каталоге Ubuntu. Вы можете изменить что-то внутри вашего .bat-скрипта, чтобы поместить nohup.out в другое место.

2
ответ дан 4 December 2019 в 15:46

Вы можете создать файл .vbs следующим образом:

set shell = CreateObject("WScript.Shell")

command = "bash -c 'touch /mnt/c/Users/Yourdesktop/Desktop/testOK2'"

shell.Run command,0

Последняя строка, " 0 означает не показывать окно, 1 означает показывать окно.

Я думаю, это должно выполнить то, что вы пытаетесь сделать.

-1
ответ дан 4 December 2019 в 15:46

Теги

Похожие вопросы