Как автоматически запустить Cron в WSL в Windows 10 и 11

Опубликовано: 2022-01-29
Рука держит секундомер.
Миллиард фотографий/Shutterstock.com

В Windows есть несколько способов автоматизации задач. Наиболее распространенным инструментом является планировщик заданий Windows, но если вы используете подсистему Windows для Linux (WSL), есть также демон cron, который запускает задачи в фоновом режиме для вашей установки WSL.

Cron не работает по умолчанию

В Windows 10 и Windows 11 cron входит в состав сред Linux, таких как Ubuntu. Проблема в том, что WSL не запускает cron автоматически, а это означает, что ваши автоматизированные задачи не выполняются по умолчанию.

Чтобы исправить это, вы можете запускать cron вручную каждый раз, когда вы открываете командную строку, но вручную запускать инструмент, который должен автоматизировать задачи, как бы упускает смысл.

К счастью, есть простой способ исправить это, и для этого нужно использовать планировщик заданий.

Окно терминала Windows WSL, показывающее, что cron не запущен.

Если вы никогда не использовали cron в Linux для запуска задач, ознакомьтесь с нашим предыдущим руководством о том, как планировать задачи в Linux. Для наших целей здесь мы собираемся предположить, что вы уже создали несколько заданий cron в своей установке WSL и что вам нужна помощь, чтобы убедиться, что они работают, а не присматривают за cron все время.

Реклама

В этом руководстве мы собираемся использовать sudo service для проверки и запуска cron, что является рекомендуемым способом остановки и запуска служб в современных сборках Ubuntu — самого популярного дистрибутива для WSL.

Также обратите внимание, что в этом руководстве предполагается, что у вас есть права администратора в вашей версии WSL. Если вы являетесь единственным пользователем своего ПК и самостоятельно включили WSL, у вас есть права администратора.

Совет. Это работает и в подсистеме Windows для Linux в Windows 11, а не только в Windows 10.

СВЯЗАННЫЕ: Как планировать задачи в Linux: введение в файлы Crontab

Подготовьте Linux

Первое, что нам нужно сделать, это разрешить компьютеру запускать cron без пароля. Когда вы запускаете такую ​​службу, как cron, вы используете команду sudo service cron start . Но для этой команды требуется пароль, к которому у Windows не будет доступа при запуске. Обойти это можно, отключив требование пароля для этой команды.

Для этого откройте окно терминала WSL и введите sudo visudo . Нажмите Enter на клавиатуре, введите свой пароль Linux и снова нажмите клавишу Enter. Если вы используете Ubuntu, это открывает файл «sudoers» с помощью удобного для начинающих текстового редактора командной строки Nano. Sudoers — это файл для системных администраторов, который может изменять привилегии и права доступа для пользователей.

Добавьте следующую команду в конец файла sudoers, а затем нажмите Ctrl+o, чтобы сохранить, и Ctrl+x, чтобы выйти из файла.

 %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 на клавиатуре, а затем найдите «Планировщик заданий». Запустите ярлык «Планировщик заданий».

Результаты поиска в Windows 10 с планировщиком заданий в качестве опции.

Когда он запустится, загляните в раздел «Действия» и выберите «Создать базовую задачу».

Планировщик заданий Windows 10 с красной стрелкой, указывающей на параметр «Создать базовое задание».

Откроется мастер основных задач. Во-первых, он попросит вас назвать задачу и дать ей описание. Вы можете ввести сюда все, что хотите. Мы назвали задачу «cron», и описание было таким: «Задача для запуска cron при запуске системы». Теперь нажмите «Далее».

В следующем разделе мы приступим к делу. Во-первых, Windows хочет знать, когда мы хотим запустить задачу. Выберите переключатель «При запуске компьютера» и нажмите «Далее».

Набор переключателей в Windows 10 с красной стрелкой, указывающей на параметр «При запуске компьютера».

В следующем разделе мы хотим «Запустить программу». Этот вариант выбран по умолчанию, поэтому нажмите «Далее».

Параметры программы планировщика заданий Windows 10 с красными стрелками, указывающими на путь к программе, и текстовое поле ввода дополнительных аргументов.

Реклама

Теперь нам нужно указать программу, которую мы хотим запустить, то есть WSL. Введите следующее в текстовое поле «Программа/скрипт»: C:\Windows\System32\wsl.exe

Нам также нужно добавить некоторые аргументы, поскольку все, что мы сделали до сих пор, — это запустили WSL, но внутри WSL нам нужно сказать Ubuntu запустить cron. Итак, в поле «Добавить аргументы» добавьте: sudo /usr/sbin/service cron start

Последнее окно создания задачи Планировщика заданий Windows 10 с красной стрелкой, указывающей на возможность открыть окно свойств задачи по завершении.

Нажмите «Далее» еще раз, установите флажок «Открыть диалоговое окно свойств, когда я нажму «Готово», а затем нажмите «Готово».

Окно свойств задачи Windows с красной стрелкой, указывающей на параметр «Выполнять независимо от того, вошел ли пользователь в систему или нет».

Задача создана, но осталось сделать еще одну последнюю вещь, чтобы убедиться, что все работает. Откроется новое окно, в котором показана сводка созданной вами задачи, но она настроена на запуск только при входе в систему. Нам нужно выбрать переключатель с надписью «Выполнять независимо от того, вошел пользователь в систему или нет», а затем нажать «ОК».

Теперь давайте проверим нашу задачу двумя способами. Сначала в главном окне планировщика заданий прокрутите вниз, пока не увидите название своей задачи. Если вы использовали имя «cron», оно должно находиться вверху списка. Щелкните задачу правой кнопкой мыши и выберите «Выполнить».

Окно терминала, показывающее, что cron запущен.

Затем вернитесь к своему терминалу WSL и введите sudo service cron status , и он должен сказать, что cron запущен. Если это не так, перепроверьте, правильно ли вы все ввели на предыдущих шагах.

Реклама

Если при первой проверке все работало правильно, пришло время для большого теста. Перезагрузите компьютер, а когда вернетесь, откройте терминал WSL и запустите sudo service cron status , который должен сообщить, что cron запущен.

Поздравляем! Вы сделали свой первый шаг в большой автоматизированный мир. Когда cron работает в фоновом режиме, задания cron, которые вы настраиваете в WSL, будут автоматически запускаться по расписанию.