В Windows есть несколько способов автоматизации задач. Наиболее распространенным инструментом является планировщик заданий Windows, но если вы используете подсистему Windows для Linux (WSL), есть также демон cron, который запускает задачи в фоновом режиме для вашей установки WSL.
Cron Isn не работает по умолчанию
В Windows 10 и Windows 11 cron входит в состав таких сред Linux, как Ubuntu. Проблема в том, что WSL не запускает cron автоматически, а это означает, что ваши автоматизированные задачи не выполняются по умолчанию.
Чтобы исправить это, вы можете запускать cron вручную каждый раз, когда открываете командную строку, но вручную запускать инструмент, который должен автоматизировать задачи, это упустить суть.
К счастью, есть простой способ исправить это, и для этого требуется использовать планировщик заданий.
Если вы никогда не использовали cron в Linux для запуска задач, ознакомьтесь с нашим предыдущим руководством о том, как планировать задачи в Linux. . Для наших целей здесь мы собираемся предположить, что вы уже создали несколько заданий cron в своей установке WSL и вам нужна помощь, чтобы убедиться, что они работают, а не присматривают за cron все время.
Для В этом руководстве мы собираемся использовать службу sudo для проверки и запуска cron, что является рекомендуемым способом остановки и запуска служб в современных сборках Ubuntu — наиболее популярном дистрибутиве для WSL.
Также обратите внимание что в этом руководстве предполагается, что у вас есть права администратора в вашей версии WSL. Если вы единственный пользователь своего ПК и самостоятельно включили WSL, значит, у вас есть права администратора.
Совет. Это работает в Подсистема Windows для Linux и в Windows 11, а не только в Windows 10.
Подготовить Linux
Первое, что нам нужно сделать, это разрешить компьютеру запустить cron без пароля. Когда вы запускаете такую службу, как cron, вы используете команду sudo service cron start. Но для этой команды требуется пароль, к которому у Windows не будет доступа при запуске. Обойти это можно, отключив требование пароля для этой команды.
Для этого откройте окно терминала WSL и введите sudo visudo
. Нажмите
Добавьте следующую команду в конец файла sudoers, а затем нажмите
%sudo ALL=NOPASSWD: /usr/sbin/service cron start
Эта команда sudoers говорит, что любой пользователь, имеющий достаточные привилегии для использования команды sudo (включая вас), не требует пароль для запуска команды sudo service cron start, которая запускает демон cron.
После того, как вы сохранили файл, вы можете проверить, выполняет ли команда свою работу, набрав sudo service cron start и он должен запускать cron без запроса пароля. Если это сработало, давайте снова отключим cron, чтобы мы могли проверить, правильно ли работает задача, которую мы создаем на следующем шаге. Для этого запустите sudo service cron stop.
Настройте Cron в планировщике заданий Windows
Это первый этап нашего пути к автоматизации cron. Давайте перейдем ко второй части с планировщиком заданий. Нажмите клавишу Windows на клавиатуре, а затем найдите «Планировщик заданий». Запустите ярлык «Планировщик заданий».
Когда он запустится, откройте раздел «Действия» и выберите «Создать базовую задачу».
Откроется мастер основных задач. Во-первых, он попросит вас назвать задачу и дать ей описание. Вы можете ввести сюда все, что хотите. Мы назвали задачу «cron», а описание таково: «Задача для запуска cron при запуске системы». Теперь нажмите «Далее».
В следующем разделе мы приступим к делу. Во-первых, Windows хочет знать, когда мы хотим запустить задачу.Выберите переключатель «При запуске компьютера» и нажмите «Далее».
В следующем разделе мы хотим «Запустить программу». Этот параметр выбран по умолчанию, поэтому нажмите «Далее».
Теперь нам нужно указать программу, которую мы хотим запустить, то есть WSL. Введите следующее в текстовое поле «Программа/скрипт»: C:WindowsSystem32wsl.exe
Нам также нужно добавить некоторые аргументы, так как все, что мы сделали до сих пор, это запустили WSL, но внутри WSL, нам нужно сказать Ubuntu запустить cron. Итак, в поле «Добавить аргументы» добавьте: sudo /usr/sbin/service cron start
Нажмите «Далее» еще раз, установите флажок «Открывать диалоговое окно свойств, когда я нажму «Готово», а затем нажмите «Готово».
Задача создана, но нам нужно сделать еще одну последнюю вещь. чтобы убедиться, что все работает. Откроется новое окно, в котором показана сводка созданной вами задачи, но она настроена на запуск только при входе в систему. Нам нужно выбрать переключатель с надписью «Выполнять независимо от того, вошел пользователь в систему или нет», а затем нажать «ОК».
Теперь давайте проверим нашу задачу двумя способами. Сначала в главном окне планировщика заданий прокрутите вниз, пока не увидите название своей задачи. Если вы использовали имя «cron», оно должно находиться вверху списка. Щелкните задачу правой кнопкой мыши и выберите «Выполнить».
Затем вернитесь к своему терминалу WSL и введите статус sudo service cron
, и он должен сказать, что cron запущен. Если это не так, перепроверьте, правильно ли вы все ввели на предыдущих шагах.
Если при первой проверке все работало правильно, пришло время для большого теста. Перезагрузите компьютер, а когда вернетесь, откройте терминал WSL и запустите sudo service cron status
, который должен сообщить, что cron запущен.
Поздравляем! Вы сделали свой первый шаг в большой автоматизированный мир. Когда cron работает в фоновом режиме, задания cron, настроенные в WSL, будут автоматически запускаться по расписанию.