Вопрос

Некоторые команды cygwin следующие .exe файлы, так что вы можете запускать их со стандартным планировщиком Windows, но другие не имеют .exe расширение so не может быть запущено из DOS (похоже на то).

Например, я хочу updatedb бегать по ночам.

Как мне заставить cron работать?

Это было полезно?

Решение

Вам также необходимо установить cygrunsrv таким образом, вы можете настроить cron как службу Windows, а затем запустить cron-config.

Если вы хотите, чтобы задания cron отправляли по электронной почте какие-либо выходные данные, вам также необходимо установить либо exim или ssmtp (перед запуском cron-config.)

Видишь /usr/share/doc/Cygwin/cron-*.README для получения более подробной информации.

Что касается программ без .exe расширение, вероятно, это сценарии оболочки какого-то типа.Если вы посмотрите на первую строку файла, вы сможете увидеть, какую программу вам нужно использовать для их запуска (например, "#!/bin/sh"), так что, возможно, вы могли бы выполнить их из планировщика Windows, вызвав программу-оболочку (например, "C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog".)

Другие советы

У вас есть два варианта:

  1. Установите cron как службу Windows, используя cygrunsrv:

    cygrunsrv -I cron -p /usr/sbin/cron -a -n
    
    net start cron
    

    Обратите внимание, что в (очень) старых версиях cron вам нужно использовать -D вместо -n

  2. Файлы 'non .exe', вероятно, являются скриптами bash, поэтому вы можете запустить их через планировщик Windows, вызвав bash для запуска скрипта, например:

    C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"
    

кончик шляпы http://linux.subogero.com/894/cron-on-cygwin/

Запустите cygwin-setup и добавьте пакет “cron” из категории “Admin”.

Мы запустим cron как сервис в пользовательской системе.Поэтому плохой СИСТЕМЕ нужен домашний каталог и оболочка.Файл “/etc/passwd” определит их.

$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash

Запуск службы:

$ cron-config
Do you want to remove or reinstall it (yes/no) yes
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 the cron daemon to run as yourself? (yes/no) no
Do you want to start the cron daemon as a service now? (yes/no) yes

Локальные пользователи теперь они могут определять свои запланированные задачи следующим образом (crontab запустит ваш любимый редактор).:

$ crontab -e  # edit your user specific cron-table HOME=/home/foo
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
# testing - one per line
* * * * *   touch ~/cron
@reboot     ~/foo.sh
45 11 * * * ~/lunch_message_to_mates.sh

Пользователи Домена:это не работает.Плохой cron не может запускать запланированные задачи от имени пользователей домена на компьютере.Но есть и другой способ:cron также запускает данные, найденные в таблице cron системного уровня в “/etc/crontab”.Поэтому вставьте туда свой suff, чтобы СИСТЕМА сделала это от своего имени:

$ touch /etc/crontab
$ chown SYSTEM /etc/crontab
$ mcedit /etc/crontab
HOME=/root
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
* * * * *   SYSTEM touch ~/cron
@reboot     SYSTEM rm -f /tmp/.ssh*

Наконец, несколько слов о записях crontab.Это либо настройки среды, либо запланированные команды.Как видно выше, в Cygwin лучше всего создать удобный ПУТЬ.Домашний каталог и оболочка обычно берутся из “/etc/passwd”.

Что касается столбцов запланированных команд, смотрите страницу руководства.

Если определенные записи crontab не запускаются, лучшим диагностическим инструментом является этот:

$ cronevents

Просто хотел добавить, что параметры cron, похоже, изменились.Нужно передать -n, а не -D.

cygrunsrv -I cron -p /usr/sbin/cron -a -n

Применил инструкции из этот ответ и это сработало Просто чтобы указать на более похожий на копипасту ответ ( потому что процедура установки cygwin реализована с защитой от копирования и вставки)
Нажмите кнопку WinLogo, введите cmd.exe , щелкните по ней правой кнопкой мыши, выберите "Запуск от имени администратора".В cmd подсказка:

 cd <directory_where_i_forgot_the setup-x86_64.exe> cygwin installer:
 set package_name=cygrunsrv cron
 setup-x86_64.exe -n -q -s http://cygwin.mirror.constant.com -P %package_name%

Убедитесь , что установщик не выдает никаких ошибок в командной строке ...Если это так - у вас, вероятно, запущены какие-то двоичные файлы cygwin, или вы не являетесь администратором Windows, или какая-то странная ошибка...

Теперь в cmd промт:

 C:\cygwin64\bin\cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D   

или любой другой полный путь к файлу, который у вас может быть к cygrunsrv.exe и запустите cron как службу Windows в командной строке

 net start cron

Теперь в удар запуск терминала crontab -e

настройте свою запись cron, пример приведен ниже:

        #sync my gdrive each 10th minute
    */10 * * * * /home/Yordan/sync_gdrive.sh

    # * * * * * command to be executed
    # - - - - -
    # | | | | |
    # | | | | +- - - - day of week (0 - 6) (Sunday=0)
    # | | | +- - - - - month (1 - 12)
    # | | +- - - - - - day of month (1 - 31)
    # | +- - - - - - - hour (0 - 23)
    # +--------------- minute

Я выяснил, как заставить службу Cygwin cron запускаться автоматически при входе в Windows 7.Вот что сработало у меня:

Используя Блокнот, создайте файл C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt с содержанием no на первой строке и yes на второй строке (без кавычек).Это ваши два ответа на запросы для cron-config.

Создать файл C:\cygwin\Cygwin_launch_crontab_service.bat с содержанием:

@echo off
C:
chdir C:\cygwin\bin
bash  cron-config < Cygwin_launch_crontab_service_input.txt

Добавьте ярлык к следующему в папке автозагрузки Windows:Cygwin_launch_crontab_service.bat

Видишь http://www.sevenforums.com/tutorials/1401-startup-programs-change.html если вам нужна помощь о том, как добавить в автозагрузку.Кстати, вы можете при желании добавить их в автозагрузку, если хотите:

Сигвин

Сервер XWin

Первый из них выполняет

C:\cygwin\Cygwin.bat

и второй выполняет

C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

Правильный синтаксис для установки cron ( хрон ) в cygwin как службе Windows необходимо передать -n в качестве аргумента, а не -D:

cygrunsrv --установить cron --путь /usr/sbin/cron --аргументы -n

-D возвращает ошибку использования при запуске cron ( хрон ) в cygwin:

$

$cygrunsrv --установить cron --путь /usr/sbin/cron --аргументы -D

$cygrunsrv --запустить cron

cygrunsrv ( сигрунсрв ):Ошибка при запуске службы:QueryServiceStatus Статус запроса:Ошибка Win32 1062:

Служба не была запущена.

$cat /var/log/cron.log

cron ( хрон ):неизвестный вариант - D

использование:/usr/sbin/cron [-n] [-x [ext, sch, proc, parc, загрузка, разное, тест,бит]]

$

На странице ниже есть хорошее объяснение.

Установка и настройка службы Cygwin Cron в Windows:https://www.davidjnice.com/cygwin_cron_service.html

P.S. Мне пришлось бежать Терминал Cygwin64 на моем ПК с Windows 10 в качестве администратора, чтобы установить cron ( хрон ) как служба Windows.

Getting updatedb to work in cron on Cygwin -- debugging steps
1) Make sure cron is installed.
 a) Type 'cron' tab tab and look for completion help.
   You should see crontab.exe, cron-config, etc.  If not install cron using setup.
2) Run cron-config.  Be sure to read all the ways to diagnose cron.
3) Run crontab -e
 a) Create a test entry of something simple, e.g.,
   "* * * * * echo $HOME >> /tmp/mycron.log" and save it.
4) cat /tmp/mycron.log.  Does it show cron environment variable HOME
   every minute?
5) Is HOME correct?  By default mine was /home/myusername; not what I wanted.
   So, I added the entry
   "HOME='/cygdrive/c/documents and settings/myusername'" to crontab.
6) Once assured the test entry works I moved on to 'updatedb' by
   adding an entry in crontab.
7) Since updatedb is a script, errors of sed and find showed up in
   my cron.log file.  In the error line, the absolute path of sed referenced
   an old version of sed.exe and not the one in /usr/bin.  I tried changing my
   cron PATH environment variable but because it was so long crontab
   considered the (otherwise valid) change to be an error.  I tried an
   explicit much-shorter PATH command, including what I thought were the essential
   WINDOWS paths but my cron.log file was empty.  Eventually I left PATH alone and
   replaced the old sed.exe in the other path with sed.exe from /usr/bin.
   After that updatedb ran to completion.  To reduce the number of
   permission error lines I eventually ended up with this:
   "# Run updatedb at 2:10am once per day skipping Sat and Sun'
   "10 2  *  *  1-5  /usr/bin/updatedb --localpaths='/cygdrive/c' --prunepaths='/cygdrive/c/WINDOWS'"

Notes: I ran cron-config several times throughout this process
       to restart the cygwin cron daemon.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top