Автоматический запуск cron в WSL через Планировщик заданий Windows

Быстрые ссылки
- Cron по умолчанию не запускается
- Подготовка Linux (WSL)
- Настройка cron через Планировщик заданий Windows
Введение
Windows предоставляет несколько способов автоматизации задач. Самый распространённый — Планировщик заданий Windows. Если вы используете Windows Subsystem for Linux (WSL), внутри него можно запускать стандартный демон cron, который планирует и выполняет задания (cronjobs). Но WSL не запускает cron автоматически при старте системы, поэтому cron-задания могут не выполняться, пока вы вручную не стартнёте демон.
Ниже — пошаговая инструкция, как настроить автоматический запуск cron в WSL при старте Windows. Предполагается, что у вас уже есть созданные cronjobs в вашем дистрибутиве WSL (например, Ubuntu), и вы хотите, чтобы они запускались без ручного вмешательства.
Важно: инструкция рассчитана на пользователей с правами администратора в WSL (пользователь может выполнять sudo). Подход работает как в Windows 10, так и в Windows 11.
Cron по умолчанию не запускается
WSL включает дистрибутивы Linux, например Ubuntu, где доступен cron. Однако WSL не стартует системные демоны автоматически при запуске Windows в большинстве конфигураций. Вы могли заметить, что после перезапуска системы ваши cronjobs не выполняются — это потому, что демон cron не работает.
Вы могли бы запускать cron вручную в каждом терминальном сеансе, но это противоречит самой идее автоматизации. Поэтому мы используем Планировщик заданий Windows, чтобы при старте Windows запускать WSL с командой, которая стартует cron.

Если вы не знакомы с настройкой cron в Linux, сначала ознакомьтесь с базовыми материалами по crontab — кратко: crontab — это таблица расписания для запуска команд по времени. Здесь мы не пересматриваем синтаксис crontab, а сосредоточимся на том, как обеспечить запуск демона cron.
Подготовка Linux (WSL)
Первый шаг — позволить системе запускать cron из внешнего процесса (в нашем случае — из Планировщика заданий Windows) без запроса пароля. Команда, которую мы будем использовать для запуска cron внутри WSL:
sudo service cron startПо умолчанию sudo требует пароль, а Планировщик заданий Windows не сможет его передать. Решение — добавить правило в файл sudoers, разрешающее запуск конкретной команды без пароля.
Шаги:
- Откройте терминал WSL.
- Выполните:
sudo visudo- В nano (редактор по умолчанию в большинстве Ubuntu) добавьте внизу файла строку:
%sudo ALL=NOPASSWD: /usr/sbin/service cron start- Сохраните (Ctrl+O), затем выйдите (Ctrl+X).
Эта строка говорит: любой пользователь из группы sudo может запускать команду /usr/sbin/service cron start без ввода пароля. После сохранения проверьте:
sudo service cron startЕсли демон запустился без запроса пароля, всё настроено верно. Остановите cron, чтобы протестировать Планировщик заданий позже:
sudo service cron stopВажно: не давайте права NOPASSWD для команд, которые могут использоваться во вред — ограничивайте правило конкретной командой и её путём.
Примечание: если ваш дистрибутив использует systemd и у вас другой способ управления демонами, команда может отличаться. В типичной Ubuntu для WSL используется /usr/sbin/service.
Создание задачи в Планировщике заданий Windows
Теперь создадим задачу, которая при старте Windows выполнит WSL и передаст ему команду для старта cron.
Шаги в Windows:
- Нажмите клавишу Windows, введите “Планировщик заданий” и откройте соответствующий ярлык.

- В правой панели выберите “Создать простую задачу…” (Create Basic Task) или “Создать задачу…” (Create Task) для детальной настройки. В мастере укажите имя, например
cron, и описание, например: “Запуск cron в WSL при старте системы”.

- В разделе, где спрашивают, когда запускать задачу, выберите “При запуске компьютера” (When the computer starts).

В разделе действия выберите “Запуск программы” (Start a program).
В поле “Программа/скрипт” укажите путь к wsl.exe:
C:\Windows\System32\wsl.exe- В поле “Добавить аргументы” укажите команду, которую нужно выполнить в WSL. Мы хотим запустить cron через sudo без запроса пароля:
sudo /usr/sbin/service cron start- Завершите мастер, но отметьте опцию “Открыть окно свойств задачи после нажатия Готово” (Open the Properties dialog when I click Finish), чтобы внести последние настройки.

- В свойствах задачи на вкладке “Общие” выберите “Выполнять независимо от того, вошёл пользователь в систему или нет” (Run whether user is logged on or not). Это позволяет запускать задачу без интерактивной сессии.

- При необходимости отметьте “Выполнять с наивысшими правами” (Run with highest privileges). Нажмите ОК и при необходимости введите учётные данные пользователя Windows.
Тестирование
- В списке задач Планировщика найдите вашу задачу (например,
cron), кликните правой кнопкой и выберите “Выполнить”. - Вернитесь в терминал WSL и проверьте статус cron:
sudo service cron statusВы должны увидеть сообщение, что демон работает. Если нет — проверьте точки ниже.
- После успешного ручного теста перезагрузите компьютер и снова проверьте статус cron в WSL:
sudo service cron statusЕсли cron запущен после перезагрузки, задача работает корректно.

Частые проблемы и их решения
- Подсказка пароля при запуске задачи. Убедитесь, что вы добавили правило в sudoers точно как указано и что путь к команде совпадает:
/usr/sbin/service cron start. - Неправильный путь к wsl.exe. Используйте
C:\Windows\System32\wsl.exe(экранируйте обратные слэши при указании в документации, но в интерфейсе Планировщика просто вставьте путь как есть). - Задача не запускается при старте: проверьте, включён ли триггер “При запуске компьютера” и установлена ли опция “Выполнять независимо от того, вошёл пользователь в систему или нет”.
- Проблемы с правами: отметьте “Выполнять с наивысшими правами” и проверьте, что учётные данные пользователя актуальны.
- Если ваш дистрибутив использует systemd вместо init/service, способы управления сервисами могут отличаться; проверьте документацию конкретного дистрибутива.
Советы по отладке:
- В Планировщике в истории задачи смотрите код возврата и любую информацию о запуске.
- Запустите ту же команду вручную в обычном терминале Windows:
wsl sudo /usr/sbin/service cron startи посмотрите вывод.
Дополнительно: примеры crontab и сценариев проверки
Пример простого задания crontab, которое пишет timestamp в файл каждую минуту (полезно для тестирования):
* * * * * /bin/date >> /home/youruser/cron-test.log 2>&1Шаги для проверки:
- Добавьте вышеуказанную строку в crontab вашего пользователя (
crontab -e). - Убедитесь, что cron запущен с помощью Планировщика.
- Подождите пару минут и проверьте содержимое
/home/youruser/cron-test.log.
Критерии приёмки
- После перезагрузки Windows команда
sudo service cron statusв WSL сообщает, что cron активен. - Тестовый crontab выполняется в назначенное время (например, файл
cron-test.logполучает новые строки). - Планировщик успешно выполняет задачу вручную через опцию “Выполнить”.
Безопасность и рекомендации
- Не давайте NOPASSWD-права для широких групп команд; ограничьте правило конкретным путём.
- Если у вас на WSL важные данные, убедитесь, что ваша конфигурация не позволяет посторонним пользователям запускать команды от вашего имени через Планировщик.
- Регулярно проверяйте логи cron (
/var/log/syslogили/var/log/cron.log, зависит от дистрибутива) для обнаружения сбоев.
Альтернативные подходы
- Использовать системные инструменты Windows для запуска задач напрямую (например, сценарии PowerShell), которые вызывают отдельно созданные скрипты в файловой системе WSL.
- Для контейнеризированных рабочих нагрузок — запускать планировщик внутри контейнера или использовать внешнюю систему оркестрации задач.
- Если требуется более сложная синхронизация демонов Linux при старте WSL, можно создать пользовательские системные службы в Windows, которые управляют жизненным циклом WSL-инстансов.
Методология: быстрый чеклист внедрения (мини-метод)
- Подготавливаем WSL:
sudo visudo→ добавляем правило NOPASSWD. - Создаём задачу в Планировщике: программа
C:\Windows\System32\wsl.exe, аргументыsudo /usr/sbin/service cron start. - Во свойствах: триггер — “При запуске компьютера”, опция — “Выполнять независимо от того, вошёл пользователь в систему или нет”.
- Тестируем: вручную выполнить задачу, проверить
sudo service cron statusи/или лог тестовой задачи. - Перезагружаем ПК и подтверждаем работоспособность.
Роль‑ориентированные чеклисты
Для системного администратора:
- Убедиться, что правило в sudoers минимально (только для
/usr/sbin/service cron start). - Проверить логи cron и Планировщика на каждом обновлении системы.
- Убедиться, что обновления WSL или дистрибутива не меняют пути.
Для разработчика/пользователя:
- Подготовить crontab задания и протестировать их вручную.
- Проверить, что используемые пути и права в скриптах корректны для сред WSL.
Диаграмма принятия решения (Mermaid)
flowchart TD
A[Нужен автоматический cron в WSL?] -->|Да| B[WSL установлен?]
A -->|Нет| Z[Нет действий]
B -->|Нет| Y[Установить WSL и Linux-дистрибутив]
B -->|Да| C[Добавить правило в sudoers]
C --> D[Создать задачу в Планировщике]
D --> E[Тестировать вручную]
E --> F{cron запущен?}
F -->|Да| G[Перезагрузить и проверить]
F -->|Нет| H[Отладка: логи, пути, права]
H --> DСовместимость и особенности
- Работает в WSL1 и WSL2, но поведение демонов может отличаться в зависимости от конфигурации дистрибутива.
- Некоторые дистрибутивы или кастомные сборки могут использовать альтернативные механизмы инициализации (systemd и т.п.). В таких случаях используйте соответствующие команды для управления сервисами.
Факты и полезные команды (шпаргалка)
- Проверка статуса cron:
sudo service cron status- Запустить cron вручную:
sudo service cron start- Остановить cron:
sudo service cron stop- Правило sudoers для запуска без пароля:
%sudo ALL=NOPASSWD: /usr/sbin/service cron startFAQ
Q: Нужно ли мне давать NOPASSWD для других команд?
A: Нет. Давайте минимальные привилегии и указывайте точную команду и путь.
Q: Будет ли cron запускаться, если я использую другое имя пользователя?
A: Да, если пользователь является членом группы sudo или правило в sudoers настроено для соответствующей группы/пользователя.
Q: Можно ли запускать несколько команд через один запуск wsl.exe?
A: Да, можно передавать более сложную команду или сценарий, например: wsl bash -lc "sudo /usr/sbin/service cron start && echo started".
Итог
Вы настроили автоматический запуск cron в WSL через Планировщик заданий Windows. Это устраняет необходимость запуска cron вручную и позволяет вашим cronjobs выполняться по расписанию после каждой перезагрузки. Следуйте принципам минимальных привилегий и регулярно проверяйте логи для надёжности.
Важно: если ваша инфраструктура критична к безопасности или доступности, тестируйте настройки в тестовой среде перед внедрением в продакшен.
Если хотите, могу подготовить: 1) шаблон задачи (.xml) для импорта в Планировщик, 2) пример полноценного crontab для типичных задач (бэкапы, зачистка логов, мониторинг) или 3) краткое объявление для команды о внедрении (100–200 слов).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента