Передача команды в WSL Ubuntu 16.04 при открытии / загрузке WSL Ubuntu

628
a.t.

После настройки задания cron я пытаюсь: автоматически включить службу cron при открытии приложения Windows Subsystem для Linux Ubuntu 16.04 из магазина приложений Windows.

В настоящее время я пытаюсь достичь этой цели, симулируя:

  1. Откройте WSL Ubuntu
  2. войти sudo service cron start
  3. <enter>

Для этого я нашел ubuntu1604.exe, сделал себя владельцем и дал себе разрешение на чтение и запись и открыл ubuntu1604.exe.

Затем я открываю cmdв режиме администратора, просматриваю: C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgscи ввожу : ubuntu1604.exeчтобы убедиться, что смог открыть WSL Ubuntu из cmd без всякого запроса. Я был, так как он только что открыл Ubuntu в том же cmdокне (виден благодаря зеленому, <user>@<pcname>:~$отображаемому в cmd).

Затем я попытался передать аргумент WSL Ubuntu, открывая его с помощью:

  1. ubuntu1604.exe run echo "hello world"
  2. ubuntu1604.exe echo "hello world"
  3. ubuntu1604.exe -c echo "hello world"
  4. ubuntu1604.exe -c

Тем не мение:

  1. Возвращает, hello worldно не открывает WSL Ubuntu.
  2. Возвращает форму документации о том, как запустить дистрибутив Linux (см. Рисунок ниже).
  3. Возвращает, hello worldно не открывает WSL Ubuntu.
  4. Открывает Ubuntu в местоположении текущего пути cmd, но не выполняет

Documentation received in command 2.

Затем я попытался открыть его из пакетного сценария или сценария powershell:

  1. Пакетный скрипт test1.bat:

start /d "C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc" ubuntu1604.exe echo "hello world"

  1. Пакетный скрипт: test2.bat

    Process.Start("C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe", "echo "hello world"");

  2. Скрипт Powershell: test3.ps1

Process.Start("C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe", "echo "hello world"");

  1. Сценарий Powershell: test4.ps1 Process.Start ("C: \ Program Files \ WindowsApps \ CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc \ ubuntu1604.exe", echo "hello world");

Хоть:

  1. Открывает большой черный экран и закрывается в мерцании.
  2. Process.Start не распознается как внутренняя или внешняя команда
  3. Не на языке PowerShell
  4. Не на языке PowerShell.

Теперь я знаю, возможно, что опция передачи любого аргумента, который может выполнить команду без взаимодействия с пользователем, при запуске WSL ubuntu1604 может быть отключена, поскольку это приложение магазина приложений (или по любой другой причине).

Следовательно:

  1. Если кто-то знает, правильный ли мой синтаксис, но мое намерение
    не будет возможно таким образом, пожалуйста, дайте мне знать.
  2. Если это возможно, но я делаю это неправильно, я был бы признателен за любые отзывы о том, что я делаю неправильно, или за решение, которое делает это правильно.
0
Возможный дубликат [Как заставить WSL запускать сервисы при запуске] (https://superuser.com/questions/1343558/how-to-make-wsl-run-services-at-startup) a.t. 5 лет назад 5

1 ответ на вопрос

0
a.t.

Я думаю, что cronjobs предназначены для периодического запуска.

Для автоматического запуска команды при запуске WSL Ubuntu 16.04 вы можете:

  1. CD для /home/<your ubuntu user name>
  2. sudo nano .bashrc
  3. Затем текстовый редактор nano создает / открывает файл .bashrc
  4. В этом файле уже может быть показано много примеров. Чтобы просто выполнить команду при запуске WSL Ubuntu 16.04, напишите свою команду в первой строке файла .bashrc.
  5. Например: echo "hello world"как показано на рисунке ниже.
  6. Закройте редактор с помощью: ctrl+x
  7. Сохраните файл с Y
  8. Выход из убунту
  9. Перезапустите Ubuntu и убедитесь, что hello world напечатан перед вашим именем пользователя.

! [Пример команды в .bashrc, которая выполняется при загрузке ubuntu WSL.] 1

Вы можете заменить hello worldкоманду на, sudo service cron startчтобы включить службу cronjob. Однако тогда вы все равно должны ввести свой пароль вручную. Чтобы решить эту проблему, используйте: https://askubuntu.com/questions/147241/execute-sudo-without-password

  1. Откройте WSL Ubuntu 16.04 (терминал)
  2. sudo visudo
  3. Внизу файла добавьте строку: `ALL = (ALL) NOPASSWD: ALL
  4. Например, с именем пользователя zq вы должны добавить следующую строку в конец файла:
  5. zq ALL=(ALL) NOPASSWD: ALL
  6. Ctrl + X для выхода
  7. yс последующим <enter>сохранением.
  8. Затем снова закройте Ubuntu, снова откройте его и проверьте
  9. Служба cron запускается автоматически при загрузке / открытии WSL Ubuntu 16.04 без запроса пароля.
  10. (вы можете проверить с помощью команды:. sudo service cron status)

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