После настройки задания cron я пытаюсь: автоматически включить службу cron при открытии приложения Windows Subsystem for 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, но не выполняет

Документация получена в команде 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 Процесс.Пуск (C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe ", echo" hello world ");`

Хоть:

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

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

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

  1. Если кто-нибудь знает, правильный ли мой синтаксис, но мое намерение
    не будет возможно таким образом, пожалуйста, дайте мне знать.
  2. Если это возможно, но я делаю это неправильно, я был бы признателен за любые отзывы о том, что я делаю неправильно, или за решение, которое делает это правильно.

1 ответ1

0

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

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

  1. перейдите в /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, которая выполняется при загрузке WSL Ubuntu.]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 .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .