Как автоматически запустить Cron в WSL в Windows 10 и 11
Опубликовано: 2022-01-29В Windows есть несколько способов автоматизации задач. Наиболее распространенным инструментом является планировщик заданий Windows, но если вы используете подсистему Windows для Linux (WSL), есть также демон cron, который запускает задачи в фоновом режиме для вашей установки WSL.
Cron не работает по умолчанию
В Windows 10 и Windows 11 cron входит в состав сред Linux, таких как Ubuntu. Проблема в том, что WSL не запускает cron автоматически, а это означает, что ваши автоматизированные задачи не выполняются по умолчанию.
Чтобы исправить это, вы можете запускать 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 на клавиатуре, а затем найдите «Планировщик заданий». Запустите ярлык «Планировщик заданий».
Когда он запустится, загляните в раздел «Действия» и выберите «Создать базовую задачу».
Откроется мастер основных задач. Во-первых, он попросит вас назвать задачу и дать ей описание. Вы можете ввести сюда все, что хотите. Мы назвали задачу «cron», и описание было таким: «Задача для запуска cron при запуске системы». Теперь нажмите «Далее».
В следующем разделе мы приступим к делу. Во-первых, Windows хочет знать, когда мы хотим запустить задачу. Выберите переключатель «При запуске компьютера» и нажмите «Далее».
В следующем разделе мы хотим «Запустить программу». Этот вариант выбран по умолчанию, поэтому нажмите «Далее».
Теперь нам нужно указать программу, которую мы хотим запустить, то есть WSL. Введите следующее в текстовое поле «Программа/скрипт»: C:\Windows\System32\wsl.exe
Нам также нужно добавить некоторые аргументы, поскольку все, что мы сделали до сих пор, — это запустили WSL, но внутри WSL нам нужно сказать Ubuntu запустить cron. Итак, в поле «Добавить аргументы» добавьте: sudo /usr/sbin/service cron start
Нажмите «Далее» еще раз, установите флажок «Открыть диалоговое окно свойств, когда я нажму «Готово», а затем нажмите «Готово».
Задача создана, но осталось сделать еще одну последнюю вещь, чтобы убедиться, что все работает. Откроется новое окно, в котором показана сводка созданной вами задачи, но она настроена на запуск только при входе в систему. Нам нужно выбрать переключатель с надписью «Выполнять независимо от того, вошел пользователь в систему или нет», а затем нажать «ОК».
Теперь давайте проверим нашу задачу двумя способами. Сначала в главном окне планировщика заданий прокрутите вниз, пока не увидите название своей задачи. Если вы использовали имя «cron», оно должно находиться вверху списка. Щелкните задачу правой кнопкой мыши и выберите «Выполнить».
Затем вернитесь к своему терминалу WSL и введите sudo service cron status
, и он должен сказать, что cron запущен. Если это не так, перепроверьте, правильно ли вы все ввели на предыдущих шагах.
Если при первой проверке все работало правильно, пришло время для большого теста. Перезагрузите компьютер, а когда вернетесь, откройте терминал WSL и запустите sudo service cron status
, который должен сообщить, что cron запущен.
Поздравляем! Вы сделали свой первый шаг в большой автоматизированный мир. Когда cron работает в фоновом режиме, задания cron, которые вы настраиваете в WSL, будут автоматически запускаться по расписанию.