Разворачиваем cron в Windows

    Стандартный планировщик Windows штука мощная, но столкнулся с проблемой, которая не позволила мне легко им пользоваться в «домашнем» выпуске Windows. Пришлось установить в систему настоящий cron. Ни капли не пожалел!
    Как к этому пришёл, и что из этого поучилось под катом.

    Пользователь без прав


    Всё началось с того, что я хотел запланировать задание. Нужно было каждую минуту выполнять простой cmd-скрипт, который подготавливал окружение и запускал некий скрипт на Python.
    Так как машина, на которой выполняется задание не основная рабочая, то нужно было выполнять задание, даже когда пользователь не зашёл в систему. Для этого был выбран режим:

    При сохранении задания планировщик предупредил, что для указанного пользователя нужно разрешить «Вход в качестве пакетного задания». Для этого предлагается изменить политику безопасности. Однако сделать это не удалось, так как в «домашней» версии Windows нет оснастки для управления политикой безопасности (буду благодарен за подсказку альтернативного решения).
    От запутанного конфигурирования стало как-то совсем грустно и захотелось мне иметь такой же простой и понятный инструмент как cron…

    Cronизация Windows


    Установка cron на Windows оказалась вполне реализуемой затеей. Я не стал искать специальной версии cron для Windows (поделитесь, если кто знает), а обратился сразу к Cygwin. Кроме стандартного пакета, я выбрал:

    С пакетом cron всё понятно. Пакет cygrunsrv позволяет запускать разные программы как службы. После установки Cygwin можно переходить к конфигурированию cron.

    Конфигурирование службы сron в Windows


    Теперь переходим к самому ответственному шагу. Запускаем «Cygwin Terminal» с правами администратора и набираем команду:
    > cron-config
    Cron is already installed as a service under account LocalSystem.
    Do you want to install the cron daemon as a service? (yes/no) yes
    Enter the value of CYGWIN for the daemon: [ ] ntsec
    Do you want to start the cron daemon as a service now? (yes/no) yes
    
    Про ntsec можно подробнее почитать здесь.

    Готово. Можно давать задания. Если служба не пошла, попробуйте её стартануть вручную:
    > net start cron
    

    Теперь открываете crontab и записываете задания (по умолчанию vi):
    > crontab.exe -e
    

    Можно «залить» задание через echo:
    > echo "*/5 * * * * /cygdrive/c/crons/task.bat" >> C:\cygwin\var\cron\tabs\[Username]
    

    Теперь перегрузите компьютер и посмотрите, как замечательно выполняются задания без входа в систему.
    Поделиться публикацией

    Похожие публикации

    Комментарии 23

      0
      тоже самое только под perl скрипты нужно… Спасибо.
        +10
        Есть замечательная программа nncron. для граждан стран бывшего СССР.
          +4
          Для граждан стран бывшего СССР бесплатна.
            0
            Спасибо! Правда давно не обновлялась прога, надо на совместимость испытать будет.
              0
              Совместимость с win7 сильно хромает. Удалось завести после танцев с бубном. Но ничего лучше и мощнее я не видел.
                0
                Хоть и некропостинг, но все равно отвечу: проблемы ннкрона с семеркой уже давно удалось пофиксить и выходят новые версии. На самом деле тут проблема не в ннкроне, а в изменении политики безопасности для сервисов в висте и выше — поэтому надо его просто запускать как приложение: nncron.exe -ns
            0
            В избранное :)
              +1
              Не знаю, насколько он вам подойдёт, но под Windows давно существует nnCron, базируется он на cron'e или нет сказать не могу, но тулза удобная.
                0
                Нет, с оригинальным cron у nnCron общее только синтаксис запуска приложения/команды в упрощенном режиме.
                0
                Logon as a batch Job можно дать с помощью ntrights (http://support.microsoft.com/kb/279664/ru)
                  0
                  Жаль в Win 7 тоже не входит в стандартный комплект. Но направление мысли понравилось, попробую найти альтернативу в PowerShell.
                  0
                  Могу посоветовать CRONw.
                  Пользовался им. За время эксплуатации особых претензий к нему не было.
                    0
                    Спасибо! Понравилось, что для 6-го ядра «should work but not tested». У разработчиков не было свежей винды ) Надо проtested )))
                    –2
                    Прикол…

                      +1
                      На первой картинке прикольный перевод:
                      Wыndows 7, Wыndows Server 2008 R2
                        0
                        Такой «копирайт» есть на всех картинках =)
                        0
                        Запускаем «Cygwin Terminal» с правами администратора
                        Раз у вас есть пароль администратора, почему вы его не дали планировщику? Планировщик будет работать в независимости от того есть пользователь в системе или нет
                          0
                          Проблема в удобстве настройки «Вход в качестве пакетного задания», а здесь пароль не поможет (
                          +2
                          Автор, указал бы что ли прямые ссылки, а не через баннерный folloffer
                            0
                            Ок. Так и сделал :]
                            0
                            под win2000/xp во времена фидо был популярен nncron.
                            под семеркой он уже не очень актуален как-то :(
                              0
                              "… Однако сделать это не удалось, так как в «домашней» версии Windows нет оснастки для управления политикой безопасности (буду благодарен за подсказку альтернативного решения)..."

                              когда то столкнулся с проблемой в Windows 7 HomeBasic, нужно было изменить что-то в политиках безопасности…
                              нашел решение на сайте microsoft — Group Policy Settings Reference for Windows and Windows Server
                                0
                                Тема очень актуальна!

                                Вроде, сделал всё по мануалу, перегрузился, и т.п.

                                "cron" как служба в Win7-64bit работает.
                                Из терминала — могу запустить мой батник (он чистит опр. каталог),
                                а по крону — не работает.

                                crontab -l говорит что всё ОК.
                                задание есть.
                                Когда его добавил в файлик, даже перезапустил службу на всякий пожарный.

                                И всё одно: батник работает из-под терминала, а вот, крон почему-то его не запускает…

                                Где козлю?

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое